为什么在使用MSBuild 4.0编译.NET3.5项目时会出现BadImageFormatException

时间:2010-10-12 20:21:33

标签: wpf msbuild

我有一个用VS2008创建的项目。我正在尝试使用MSBuild 4.0构建它,但仍然针对3.5框架。当我这样做时,我得到了例外:

[exec] ResGen:错误RG0000:无法加载引用的程序集“C:\ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ PresentationUI \ v4.0_4.0.0.0__31bf3856ad364e35 \ PresentationUI.dll”。捕获BadImageFormatException,说“无法加载文件或程序集'C:\ WINDOWS \ Microsoft.Net \ assembly \ GAC_MSIL \ PresentationUI \ v4.0_4.0.0.0__31bf3856ad364e35 \ PresentationUI.dll'或其依赖项之一。此程序集由以下内容构建:比当前加载的运行时更新的运行时,无法加载。“

请注意,它正在尝试加载4.0版本的PresentationUI.dll,即使我正在编译3.5框架。如果我将项目转换为VS2010格式无关紧要,错误是一样的。

3 个答案:

答案 0 :(得分:3)

问题原来是PresentationUI.dll程序集的HintPath与实际的程序集位置不匹配。在这种情况下,MSBuild会回退到寻​​找GAC中的程序集。由于MSBuild 4.0在.NET 4.0运行时运行,因此它会获取程序集的4.0版本,这与正在编译的3.5项目不兼容。

答案 1 :(得分:0)

我遇到了同样的问题,在stackoverflow中寻找解决方案遇到了这个问题。最后在R& D之后我得到了解决方案。

删除旧引用并添加新引用(如果有)。转到高级编译器选项并选择目标框架为4.0。 :)它很有用。

答案 2 :(得分:0)

此异常的另一个原因是解决方案中所有项目中目标平台的不匹配。例如,如果一些项目的目标平台为x86,其余项目为x64,则会出现此异常。