【问题标题】:What can cause assembly build version and runtime version to differ?什么会导致程序集构建版本和运行时版本不同?
【发布时间】:2011-06-07 18:54:10
【问题描述】:

我有一个 C# 解决方案,两个项目,一个 winforms 和一个 dll,其中 winforms 项目引用 dll,我已将项目中我知道的所有内容设置为框架版本 2.0,但我仍然得到这个启动时出现 FileLoadException:

混合模式程序集是针对 运行时版本“v2.0.50727” 并且无法在 4.0 中加载 运行时无需额外 配置信息。

我配置的设置是:

  • 属性 - 目标框架是 .NET 框架 2.0
  • 项目链接的所有引用均使用 .NET 2.0 构建
  • 配置管理器中指示是否应构建项目的所有复选框均已选中。

我也试过清理解决方案,删除地图项目\bin\,但是当重新编译运行解决方案时,仍然抛出异常。在我的机器上,我安装了 Visual Studio 2010 Ultimate,同时安装了 .NET 4.0 和 .NET 3.5 SP1。

我一定错过了导致此异常的设置,但我不知道,有人知道吗?我只是希望它使用 .NET 2.0,而不是 .NET 4.0。

【问题讨论】:

    标签: .net frameworks version runtime-error


    【解决方案1】:

    好吧,尽管您努力以 2.0 为目标,但它仍在运行 4.0 CLR。它在抱怨 C++/CLI 程序集,大概是您引用的 DLL。需要一个 .config 文件来说服 CLR 可以使用 .NET 4.0 加载该 DLL,即使它可能包含需要使用 2.0 的非托管代码,谷歌“useLegacyV2RuntimeActivationPolicy”。这将解决该 DLL 的 4.0 加载问题。

    关于它仍然可以加载 4.0 的唯一其他原因是 .config 文件说它应该使用 4.0,<supportedRuntime> 元素。为了使这更直观,您可以使用 Fuslogvw.exe 工具,将其设置为记录所有绑定。如果您无法理解,请将 EXE 的绑定跟踪复制/粘贴到您的问题中。

    【讨论】:

    • 您误解了我的短语“两个项目,一个引用 dll 的 winforms”。我的意思是“两个项目,一个 winforms 和一个 dll,其中 winforms 项目引用了 dll”。并且这两个项目的目标框架都设置为 .NET 2.0,所以这不是您推测的原因。而且我还检查了 元素,但是 csproj 和 app.config 文件都没有包含它,所以恐怕我也必须排除它。至于useLegacyV2RuntimeActivationPolicy,我研究一下,谢谢。
    • 呃,不,我明白了。正如我所说,使用 Fuslogvw.exe 来查看绑定配置的来源。
    【解决方案2】:

    要尝试强制它在 CLR 2.x 中加载,您可能需要(在您的 app.config 文件中):

    <configuration>
      <startup>
        <supportedRuntime version="v2.0.50727"/>
      </startup>
    </configuration>
    

    这通常只在你有混合模式时才需要,并且强制加载器的手。

    【讨论】:

    • 这行得通,虽然我的解决方案不是混合模式,只是管理 x86。我很好奇我的问题可能还有什么其他原因以及您的解决方案在哪里,对于这个问题的未来遇到,有什么想法吗?
    • 运行时版本(v4.0.30319)能否大于.net中的参考版本(3.0.0.0)??
    • @NullReference 引用的版本绝对没有任何意义;我可以创建一个版本为 0.0.0.1 的库,或者一个版本为 123.45.67.89 的库
    猜你喜欢
    • 2021-01-08
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多