1

我有一个应用程序和一个它所依赖的 dll,在他们的 csproj 文件中已将其设置为目标 .NET 3.5。我们正在尝试通过/p:TargetFrameworkVersion=v4.0作为命令行参数传入 msbuild(使用 NAnt)来构建这两个项目以面向 .NET 4.0。构建成功,但运行程序立即崩溃并出现 BadImageFormatException -“此程序集由比当前加载的运行时更新的运行时构建,无法加载”

使用 .NET 反射器,我检查了输出 exe 和 dll 的所有引用 - 一切都引用 .NET 4.0 dll;没有引用 .NET 2;然而我的调试器告诉我 mscorlib 2.0.50727.4971 已经加载。

将项目本身更改为面向 .NET 4,然后在 Visual Studio 中构建工作正常 - 没有问题。

我有点卡在这里,因为我不知道下一个调查步骤可能是什么。我不知道它为什么要加载那个版本的 mscorlib。

4

1 回答 1

3

检查 < supportedRuntime > 元素是否存在于应用程序的app.config. 这必须指定应用程序支持的所有公共语言运行时版本。有关 < supportedRuntime > 元素的完整描述,请参阅http://msdn.microsoft.com/en-us/library/w4atty68.aspx 。

在您的情况下,由于该应用程序以前针对 .NET 3.5,因此app.config很可能有 CLR 的“v2.0.50727”条目,但我怀疑“v4.0”没有相应的条目。

如上篇文章所述,如果条目被完全删除,则用于构建应用程序的运行时版本。我相信建议每个支持的版本都在app.config.

于 2012-09-18T06:43:51.690 回答