我讨厌问一个在这里被问过无数次的问题,以及到处都是博客,但我仍然无法让我的升级项目正常工作。
我的应用程序最初是用 VS2008 编写的,面向 .NET 3.5 SP1。我刚刚升级到 VS2010,并想尝试利用新的语言功能和集成的 MEF,所以我将所有项目都更改为面向 .NET 4.0。在正确设置并正确编译所有内容(如构建后事件、MEF 引用和类似的东西)后,我运行我的应用程序并得到了众所周知的错误:
混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。
然后我将以下属性添加到我的<startup>
元素中app.config
:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
但是当我运行我的应用程序时,我仍然得到同样的错误。我能做些什么来进一步调试这个问题吗?我真的不知道还能尝试什么。我试图找到尽可能多的关于混合模式程序集以及它们与 CLR 交互方式的信息,但我在这方面的背景知识充其量是有限的。
我还尝试通过将 log4net 的源代码重新编译为目标 .NET 4.0 来解决这个问题,但这并没有达到我的预期。编译后,我得到了这个错误:
覆盖成员时违反了继承安全规则:'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext)'。重写方法的安全可访问性必须与被重写方法的安全可访问性相匹配。
所以我找到了一篇建议尝试将以下行添加到 AssemblyInfo.cs 的帖子:
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
当我这样做时,我就回到了我开始的地方!(混合模式组装错误)。
啊。