【发布时间】:2010-03-25 23:14:02
【问题描述】:
我修改了几个不同应用程序的 .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 内容。一旦我修改了此应用程序的应用程序配置文件,我就开始在应用程序启动期间收到此异常:
撤消操作遇到的上下文与相应的设置操作中应用的上下文不同。可能的原因是在线程上设置了上下文并且未还原(撤消)。 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,但从短期来看,这是一项艰巨的任务,我希望有一些短期解决方案/hack。
非常感谢您提供的任何建议!
【问题讨论】:
标签: .net assemblies versions side-by-side