从VS2008升级到VS2010后,SGEN无法工作

时间:2010-04-30 17:17:11

标签: visual-studio-2010 .net-4.0 sgen

我最近刚刚将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时遇到同样的错误,但我无法弄清楚问题是什么。有什么想法吗?

2 个答案:

答案 0 :(得分: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中......

答案 1 :(得分:2)

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

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