【发布时间】:2015-05-29 19:44:13
【问题描述】:
看起来有很多类似的问题没有很好的解释。
环境:
赢 7
VS2012 专业版
Windows SDK 7.0
在我们的环境中,我们生成 2 个代码库 - x86 和 x64。对于这个特定的项目,我们生成*.XMlSerializers.dll。 Generate Serialization Assemblies 在构建中的设置是Auto。
当我将项目编译为 x64 配置时,我收到 SGEN 错误“尝试以不正确的格式加载程序集... system.data.dll”。此错误完全具有误导性,因为进一步调查得出以下结果:
我使用来自sysinternals 的procmon 来追踪SGEN
- 为 AnyCpu 和 x86 构建时,procmon 会显示跟踪。正在使用的 sgen 来自
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin(32-bit sngen.exe) - 为 x64 构建时,没有任何痕迹,只有上面提到的错误
我将项目配置设置为 OFF 并在 x64 中编译程序集以创建序列化程序。然后我尝试了一个命令行
- 成功来自于在
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64中使用 SGEN -(请注意 - 这是 64 位 sgen.exe) - 在 x64 程序集上运行 32 位 SGEN 失败。
这些结果得出一个结论:当VS2012编译一个Generate Serialization Assemblies设置为ON的项目时(auto是一个特例) ,它会尝试查找 sgen.exe。但是,当您的项目配置设置为为 x64 平台构建时,它无法找到合适的 sgen.exe,它本身就是为 x64 构建的。
问题:是否有 msbuild 配置或注册表设置或其他可以设置为允许 Visual Studio 找到合适的 SGEN 的东西?
我知道解决方法,即发布构建事件并将其关闭,但这不是重点。
【问题讨论】:
-
我现在没有时间尝试,但是您是否尝试过使用
SGen task的Platform属性?另外,有些相关:stackoverflow.com/q/2748974/239394. -
@Andrew 你可能正在做某事。我将不得不尝试和研究
标签: .net visual-studio build msbuild sgen