问题标签 [side-by-side]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3326 浏览

asp.net - 将旧版 ASP.NET 迁移到 MVC 2 (RC):HttpApplication 事件未触发,用户主体为空

问题

我正在尝试采用现有的 ASP.NET Web 应用程序并手动将其迁移到使用 MVC 2(我目前正在运行 RC)。我遵循了几个步骤(稍后会列出)并且似乎可以正常工作,但后来我注意到我无法设置,AuthorizeAttribute因为控制器上的 User 为 null。然后我注意到,当我导航到一个操作时,没有引发 HttpApplication 的常规生命周期事件(例如 BeginRequest 等)。我认为这可能与用户主体为空的原因有关。Web 主机是本地 IIS7 实例(在我的 Vista 工作站上)。

我创建了一个全新的 MVC 2 Web 应用程序,在迁移时用作参考。它运行得很好,引发了应用程序事件并按照我的预期填充了用户主体。

如果您想惩罚自己,请继续阅读下面的详细信息(尽我所能)。


迁移步骤

  1. 确保应用程序目录的应用程序池是 .NET 2.0 和集成
  2. 在我的 Web 项目中引用了 System.Web.Abstractions (v.3.5.0.0)、System.Web.routing (v3.5.0.0) 和 System.Web.Mvc (v2.0.0.0)。现在,我添加了 System.Web.Mvc 作为本地引用,以便更轻松地进行集成和部署。
  3. 修改了 csproj 以启用 MVC VS 插件优点(请参阅本文
  4. 在项目中添加了 Controllers 和 Views 目录,从我的示例 MVC 应用程序中添加到 /Views/web.config 中。
  5. 修改了我的 web.config (注意:我在模块和处理程序中有其他废话,但为了简单和安全起见,我隐藏了......但这些很可能是问题的一部分):

compilation部分

pages部分

system.webServer/modules部分(记住,IIS7 集成)

system.webServer/handlers部分

  1. 更新了我的 global.asax 以注册路由,并忽略会干扰我的遗留内容的内容:

    /li>

附加信息

我还使用 Autofac (v1.4.5.676) 的最新版本并利用他们的 Web 集成处理程序。我已经检查了两种方式,所有自动事实的东西都完全删除/禁用了,一切都按照我想要的方式进行了设置;无论哪种方式,对这个问题都没有影响。

我也试过这个,有没有我专门的超甜 IgnoreRoute 设置。没有效果。

另外,我想明确一点,路由似乎确实有效,我被正确发送到我的控制器和操作,我在 HttpContext.Current.User 处只有一个 Null 主体,它似乎完全没有提高任何应用程序生命周期事件。如果我不必,你知道,得到现任校长或做任何讨厌的授权,我永远不会知道有什么问题;)

是的,常规 ASPX 页面正常工作,应用程序生命周期事件正常引发。

这是我制作的一个失败的简单测试控制器的示例:

产生以下异常:

这很糟糕:(。感谢您阅读我的短篇小说。

0 投票
2 回答
2173 浏览

com - 为进程外 ActiveX 模拟 SideBySide

我们正在调整我们的客户端相对复杂的应用程序(ActiveX / .net / Delphi / C++ / COM )以使用 SxS 来实现非管理员部署和与我们产品的旧版本隔离。

我们能够通过编写一个描述我们进程使用的所有库的清单文件,而无需注册,几乎可以为我们所有的 in proc 组件实现这个目标,例如我们的 .net ui、Delphi ui 和我们在 proc 中使用的 COM 服务器在任何组件的客户端上(几乎)。

这几乎是部分:目前,我们的应用程序调用(从它的 c++ 部分)一个 out of proc ActiveX 服务器(Delphi ActiveX EXE),它本身又调用另一组 out of proc ActiveX 服务器(第三方插件,任何东西都在这里,Delphi,C++,任何东西只要它不在proc ActiveX EXE中并实现我们的接口)。

正如我们所知,SxS 不支持进程外 ActiveX 服务器。而且我们不能像在我们的主进程中的 proc com 服务器中那样使用这些对象,因为这将需要对我们的应用程序进行重大重写,甚至更糟糕的是,需要中断第三方工具和供应商使用的面向公众的 API,一个 api我们不能允许的中断。

我们偶然发现了这篇文章,该文章描述了如何从在单独进程中运行的 Internet Explorer 窗口中提取 IHTMLDocument2。这让我们想到了这种方法:

我们将创建一个辅助卫星应用程序/进程,它将像进程服务器一样运行 ActiveX。然后我们将使用LresultFromObjectObjectFromLresult将 ActiveX 对象的引用从卫星应用程序传输到主应用程序进程。卫星应用程序将拥有它自己的清单文件,这将允许它在 SxS 模式下运行。

此 Delphi ActiveX EXE 和第三方 AciveX EXE 插件之间将采用相同的方法进行通信

有一个替代解决方案,目前我们不喜欢上面提出的解决方案,即使用 .net 远程处理和 .net com 代理类通过将 com 请求转换为 .net 来打开两个进程之间的通信通道远程处理,然后在第二个过程中返回 com。

那么问题来了:

  1. 您如何看待这种方法?
  2. 您看到问题的更好解决方案了吗?
0 投票
1 回答
1302 浏览

msvcrt - 私有非托管并排装配问题

我们有一个使用大量 DLL 的大型 MFC 应用程序。到目前为止,我们一直在使用 vcredist_x86.exe 将 MFC 和 CRT 安装到非托管并行程序集缓存 (C:\Windows\WinSxS) 中。当以这种方式安装 MFC/CRT 时,应用程序会运行(在干净的 XP 机器上)。

根据 MSDN 文档,您可以通过将程序集文件复制到安装应用程序的文件夹中来安装 MFC/CRT。我已经用一个简单的 MFC 应用程序对此进行了测试,它可以工作。但是我在让我们的大型 MFC 应用程序使用这种方法工作时遇到了问题。

问题似乎是由于某些 DLL 的清单引用了早期版本的 CRT,例如,一个 DLL 包含以下清单。

我们将 CRT 程序集的 8.0.50727.762 版本复制到我们应用程序的文件夹中。如您所见,这是 CRT 的较新版本。但由于某种原因,操作系统加载程序无法使用上述清单加载 DLL。在 WinSxS 中安装相同的 CRT 程序集时不会发生这种情况。当我使用 DependencyWalker 跟踪加载时,我收到错误 LDR: LdrpWalkImportDescriptor() failed to probe c:\documents and settings\qatest\desktop\test\log4cpp.dll 的清单,ntstatus 0xc0150002

加载程序加载较新版本的程序集的能力似乎在使用私有并排程序集时不起作用,但在将程序集安装到 WinSxS 时它确实起作用。

有针对这个的解决方法吗?

0 投票
1 回答
1099 浏览

c++ - 需要深入了解如何为 C++ 程序生成清单

当我运行我构建的可执行文件时,我收到以下错误:

系统无法执行指定程序

我的直接想法是,这是一个 VC8.0 可重新分发的 DLL(msvcr80d.dll等)的依赖问题。这些 DLL 的补丁版本会影响我们的程序,我们遇到了一些问题。

当我在 Dependency Walker 下打开我的可执行文件时,会显示以下错误:

如果我打开可执行文件的清单文件,其中包含以下内容:

它似乎有 2 个Microsoft.VC80.DebugCRT依赖程序集的副本。

程序集的8.0.50727.4053版本不在我的并行配置中(我相信这个版本附带了一个未安装的 Visual Studio 补丁)。

如果我从清单文件中删除此程序集,则可执行文件运行良好。

但是,当我重新构建应用程序时,会重新生成清单并再次添加额外的依赖项。

是什么导致将此依赖项添加到清单中?我猜它与另一个 DLL 有关,我的应用程序依赖于在另一台 PC 上使用不同的可重新分发 DLL 构建,但我想确认这一点。

更新:

我已经尝试了这篇博文中的很多建议,但运气不佳。奇怪的一件事是,当我进行 Release 构建时生成的清单不包含 8.0.50727.4053 条目,但 Debug 构建包含。

0 投票
1 回答
403 浏览

windows - 使用 Python 或其他常用脚本语言/工具以编程方式获取 DLL 清单信息

我遇到了这样的问题:

http://svn.haxx.se/tsvnusers/archive-2008-07/1051.shtml

除了该应用程序是我们自己的(对不起,不会给你保密的细节)。尽管如此,SideBySide 的缺陷并不是我们的错。

无论如何,版本 X 有效,版本 Y 在一开始就轰炸了。我面临着遍历一堆目录和多达 100 个 dll 文件的任务,以找出可能存在的差异。

看起来两个 dll 文件之间存在冲突,它们加载了另一个 dll 文件的两个不同版本。

感谢您对 Python / 其他片段的帮助,以从给定文件中提取清单。谢谢!

编辑:顺便说一句,我确实找到了一种方法:我可以运行以下命令(mt.exe 是 Visual Studio 2008 工具的一部分)mt.exe -inputresource:MyFile.dll;#2 -out:MyFile.dll.extracted_manifest.txt:.

这是一个好的开始,但有两个问题:

  1. 可以嵌入多个清单(在我的理解中):#1、#2、#3,... - 我不知道哪些清单和多少提前。最大值是多少?
  2. 如果我猜测并使用该参数运行 mt.exe,我会失败。处理这些错误会使脚本变长。

有人可以对此有所了解吗?

另一个编辑:啊,没关系!1 用于 .exe,2 用于 dll,仅此而已。我想我现在知道该怎么做了。但是,如果您有比我更好的解决方案,或者如果您从 Python / 其他脚本自动调用 mt.exe,那么请随时分享。

0 投票
2 回答
3031 浏览

visual-studio - 由于 msvcr90.dll 尝试加载 FlsAlloc 导致的 XP 部署问题

我在 Windows 7 x64 上使用 VS2008 SP1a (9.0.30729.4148) 构建了一个不想在 XP 下启动的应用程序。

消息是The application failed to initialize properly (0x80000003). Click on OK to terminate the application.。我检查depends.exe并发现msvcr90.dll确实尝试FlsAlloc从 KERNEL32.dll 加载 - 而 FlsAlloc 仅从 Vista 开始可用。我确定它没有被应用程序使用。

如何解决问题?

SxS 包已经安装在目标机器上 - 事实上我有 9.0 SxS 的所有 3 个版本(初始版本、sp1 和 sp1+安全补丁)

应用程序是用_BIND_TO_CURRENT_VCLIBS_VERSION=1

我还定义了正确的目标 Windows 版本stdafx.h

清单文件

依赖的结果

在地址 0x00400000 开始“c:\program files\app\app.EXE”(进程 0xA0)。成功挂接模块。在地址 0x7C900000 加载“c:\windows\system32\NTDLL.DLL”。成功挂接模块。在地址 0x7C800000 加载“c:\windows\system32\KERNEL32.DLL”。成功挂接模块。在地址 0x785E0000 加载“c:\program files\app\MFC90.DLL”。成功挂接模块。在地址 0x78520000 处加载了“c:\program files\app\MSVCR90.DLL”。成功挂接模块。在地址 0x7E410000 加载“c:\windows\system32\USER32.DLL”。成功挂接模块。在地址 0x77F10000 加载“c:\windows\system32\GDI32.DLL”。成功挂接模块。在地址 0x77F60000 加载“c:\windows\system32\SHLWAPI.DLL”。成功挂接模块。在地址 0x77DD0000 加载“c:\windows\system32\ADVAPI32.DLL”。成功挂接模块。在地址 0x77E70000 加载“c:\windows\system32\RPCRT4.DLL”。成功挂接模块。在地址 0x77FE0000 加载“c:\windows\system32\SECUR32.DLL”。成功挂接模块。在地址 0x77C10000 加载“c:\windows\system32\MSVCRT.DLL”。成功挂接模块。在地址 0x5D090000 处加载“c:\windows\system32\COMCTL32.DLL”。成功挂接模块。在地址 0x76380000 加载“c:\windows\system32\MSIMG32.DLL”。成功挂接模块。在地址 0x7C9C0000 加载“c:\windows\system32\SHELL32.DLL”。成功挂接模块。在地址 0x77120000 加载“c:\windows\system32\OLEAUT32.DLL”。成功挂接模块。加载“c:

我应该提到我已安装 Windows SDK 7 并将其配置为默认 SDK。

0 投票
0 回答
1396 浏览

visual-studio-2008 - 是否可以使 mt.exe 在 Visual Studio 2008 中正确嵌入清单文件?

我发现mt.exe在 VCPROJ 中运行时无法正确创建清单文件并将其嵌入到可执行文件中。

例如,相同的可执行文件在 Windows 7 上加载良好,但在 Windows XP 上加载失败。清单已嵌入且正确。

它失败的地方在里面crtlib.c

这让我去了http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/2d6af19a-6ead-4c00-a896-871a28c5f7f1

我花了很多时间寻找可能的原因和解决方案我修改了项目设置以在 exe 文件之外生成清单。现在它适用于两个系统。

以下是调试版本的示例。

禁用嵌入:

这是启用嵌入的:

如果将它们进行比较,第二个添加了通用控件(我不知道从哪里开始),并且它与 requestedExecutionLevel 标记的语法略有不同。

现在的问题是是否可以使 mt.exe 正确嵌入清单以及如何?

0 投票
1 回答
3682 浏览

.net - 在应用程序中使用“useLegacyV2RuntimeActivationPolicy”和supportedRuntime 时出现问题

我修改了几个不同的应用程序的 .config 文件,如下所示:

当我为 devenv.exe.config(VS 2005 - 不要问:))执行此操作时,一切都很好 - 大多数 Visual Studio 使用 .NET 2.0,但我能够使用针对 .NET 4.0 框架的程序集.

我尝试为自定义 .exe 做同样的事情,它恰好基于 MS CAB(稍作修改)并且混合了 WPF 和 WinForms 内容。一旦我修改了这个应用程序的应用程序配置文件,我就开始得到这个异常,有时在应用程序启动期间:

Undo 操作遇到的上下文与在相应的 Set 操作中应用的上下文不同。可能的原因是在线程上设置了上下文并且未还原(撤消)。System.InvalidOperationException:撤消操作遇到的上下文与相应的 Set 操作中应用的上下文不同。可能的原因是在线程上设置了上下文并且未还原(撤消)。

有一个很长的堆栈跟踪没有直接在我的应用程序代码中显示任何内容(只是一堆 MS 程序集)。

如果我将应用程序的 .config 文件修改为:

即我删除了supportedRuntime 元素,然后应用程序不会抛出这个异常。但是当我在我的代码中尝试加载我的 .NET 4 程序集时,如果失败并出现以下问题:

System.BadImageFormatException:无法加载文件或程序集“”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。

我想这是意料之中的。

我有两个问题:

1) 知道为什么当我修改此应用程序的配置文件以包含supportedRuntime 元素、添加.NET 4 支持以及关于我能做些什么的任何建议时出现System.InvalidOperationException 异常吗?

2) 如果答案是“不知道为什么/不知道你能做些什么”,那么我的 .NET 3.5 SP1 代码 (C#) 可以为有条件地添加 .NET 4 运行时支持提供更细粒度的支持对于某个程序集,而不将我的整个应用程序转换为目标 .NET 4,或者不使用声明性配置文件方法?在某些时候,我会将整个应用程序转换为目标 .NET 4,但从短期来看,这是一项艰巨的任务,我希望有一些短期的解决方案/破解。

非常感谢您提供的任何建议!

0 投票
2 回答
4484 浏览

.net - 是否可以在新的应用程序域中加载针对不同 .NET 运行时版本的程序集?

我有一个基于 .NET 2 运行时的应用程序。我想添加一点对 .NET 4 的支持,但不想(在短期内)将整个应用程序(非常大)转换为目标 .NET 4。

我尝试了创建应用程序 .config 文件的“明显”方法,具有以下内容:

但我遇到了一些我在这里注意到的问题。

我想到了创建一个单独的应用程序域。为了测试它,我创建了一个面向 .NET 2 的 WinForm 项目。然后我创建了一个面向 .NET 4 的类库。在我的 WinForm 项目中,我添加了以下代码:

我的 DotNet4AppDomain.exe.config 文件如下所示:

不幸的是,这会在执行 dotNet4AppDomain.Load 时引发 BadImageFormatException。我在我的代码中做错了什么,还是我试图做的只是不起作用?

谢谢!

0 投票
2 回答
170 浏览

.net - 带有 .NET 4 的 Windows Live Writer 插件

有没有人写过针对 .NET 4 运行的 Windows Live Writer 插件?我已阅读 .NET 4 介绍了并行运行,因此应用程序的一部分可以针对 .NET x,而另一部分可以针对 .NET 4。

我认为 WLW 将是一个很好的起点来尝试这个,因为以前它只支持最高 .NET 2 的插件。但我的 .NET 4 插件从未显示。

也许他们在加载插件之前测试依赖项?

其他人有这个工作吗?