我修改了几个不同的应用程序的 .config 文件,如下所示:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
当我为 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 文件修改为:
<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>
即我删除了supportedRuntime 元素,然后应用程序不会抛出这个异常。但是当我在我的代码中尝试加载我的 .NET 4 程序集时,如果失败并出现以下问题:
System.BadImageFormatException:无法加载文件或程序集“”或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。
我想这是意料之中的。
我有两个问题:
1) 知道为什么当我修改此应用程序的配置文件以包含supportedRuntime 元素、添加.NET 4 支持以及关于我能做些什么的任何建议时出现System.InvalidOperationException 异常吗?
2) 如果答案是“不知道为什么/不知道你能做些什么”,那么我的 .NET 3.5 SP1 代码 (C#) 可以为有条件地添加 .NET 4 运行时支持提供更细粒度的支持对于某个程序集,而不将我的整个应用程序转换为目标 .NET 4,或者不使用声明性配置文件方法?在某些时候,我会将整个应用程序转换为目标 .NET 4,但从短期来看,这是一项艰巨的任务,我希望有一些短期的解决方案/破解。
非常感谢您提供的任何建议!