6

我最近刚刚将 VS2008/.NET 3.5 SP1 项目升级到 VS2010 和 .NET 4。我有一个构建后事件,它调用 SGEN 来生成 XmlSerializers 程序集。

每当我尝试运行它时,都会出现以下错误。

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\sgen.exe" /debug /force /verbose /c:"platform:x86" "C:\path\to\SomeAssembly.dll"
Microsoft (R) Xml Serialization support utility
[Microsoft (R) .NET Framework, Version 2.0.50727.3038]
Copyright (C) Microsoft Corporation. All rights reserved.
Error: An attempt was made to load an assembly with an incorrect format: c:\path\to\someassembly.dll.
  - Could not load file or assembly 'file:///c:\path\to\someassembly.dll'
or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.

If you would like more help, please type "sgen /?".

我从命令行运行 SGEN 时遇到同样的错误,但我无法弄清楚问题所在。有任何想法吗?

4

2 回答 2

8

似乎 SGEN 的第二行输出很重要:

[Microsoft (R) .NET Framework, Version 2.0.50727.3038]

我发现另一个版本的 SGEN 似乎可以在C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\sgen.exe. 当你运行它时它会输出这个:

[Microsoft (R) .NET Framework, Version 4.0.30319.1]

我不确定为什么两者都包含在 Windows 7 SDK 中...

于 2010-04-30T18:35:53.867 回答
2

是的,有两个版本的 sgen.exe 可用,一个用于 CLR v2 程序集,另一个用于 CLR v4 程序集。它会爆炸,因为您要求 sgen.exe 的 v2 版本处理 v4 程序集。

检查您的项目如何启动 sgen.exe。如果它是构建后事件,那么您将不得不调整 sgen.exe 的路径。我没有看到宏或环境变量可以自动正确处理,有点疏忽。

于 2010-04-30T19:12:23.187 回答