什么可能导致程序集构建版本和运行时版本不同?

时间:2011-01-12 11:37:29

标签: .net frameworks version runtime-error

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

  

构建混合模式程序集   运行时的版本'v2.0.50727'   并且无法在4.0中加载   没有额外的运行时   配置信息。

我配置的设置是:

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

此外,我已尝试清除解决方案,删除map project \ bin \,但是当重新编译并运行解决方案时,仍会抛出异常。在我的机器上,我安装了.NET 4.0和.NET 3.5 SP1的Visual Studio 2010 Ultimate。

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

2 个答案:

答案 0 :(得分:4)

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

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

这通常仅在您具有混合模式时才需要,并强制加载器的手。

答案 1 :(得分: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的绑定跟踪复制/粘贴到您的问题中。