2

我讨厌问一个在这里被问过无数次的问题,以及到处都是博客,但我仍然无法让我的升级项目正常工作。

我的应用程序最初是用 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)]

当我这样做时,我就回到了我开始的地方!(混合模式组装错误)。

啊。

4

1 回答 1

0

在重新编译源代码后,我最终让一切正常工作,目标是 .NET 4.0。我仍然不喜欢这个,因为每个人都说它应该工作。为了让应用程序最终运行,我还必须做的一件事是使用 CodePlex 的 MEF2,而不是.NET 4.0 中内置的 MEF2。我不明白为什么这两件事会相关,但我会回去尝试使其与 log4net 原样工作。完成后,我将在此处发布详细信息,希望它能帮助遇到同样问题的其他人。

于 2010-11-19T13:41:25.657 回答