从VS2008升级到VS2010后,SGEN不起作用

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时遇到了相同的错误,但我无法弄清问题出在哪里。有任何想法吗?

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中都包含了它们...


2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接