我讨厌问一个无数次在这里问的问题,以及到处都是有关的,但我仍然无法获得升级的项目来工作。

我的应用程序最初是在VS2008中编写的,针对.NET 3.5 SP1。我刚刚升级到VS2010,并认为我会尝试利用新的语言功能和集成的MEF,因此我将所有项目更改为Target .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.serialization.serializationinfo,system.runtime.serialization.serialization.StreamingContext)'。覆盖方法的安全可访问性必须与Overriden方法的安全可访问性相匹配。

因此,我找到了一篇建议尝试将以下行添加到assemblyInfo.cs的帖子:

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

当我这样做的时候,我立刻回到了我开始的地方! (带有混合模式组件错误)。

啊。

有帮助吗?

解决方案

重新编译源后,我最终使所有内容都可以工作,以.NET 4.0为目标。我仍然不喜欢这个,因为每个人都说它应该起作用。我还必须要做的一件事才能使申请最终运行,这是从Codeplex中使用MEF2,并且 不是 内置在.NET 4.0中。我不明白为什么这两件事会相关,但是我会回去尝试使其与log4net as-is一起使用。完成后,我将在此处发布详细信息,希望它能帮助其他遇到同一问题的人。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top