看起来有很多类似的问题没有很好的解释。
环境:
赢 7
VS2012 专业版
视窗 SDK 7.0
在我们的环境中,我们生成 2 个代码库 - x86 和 x64。对于这个特定的项目,我们生成*.XMlSerializers.dll
. 生成序列化程序集的构建中的设置是Auto
.
当我将项目编译为 x64 配置时,我收到 SGEN 错误“尝试以不正确的格式加载程序集... system.data.dll”。此错误完全具有误导性,因为进一步调查得出以下结果:
我用procmon
fromsysinternals
来追踪 SGEN
- 为AnyCpu和x86构建时, procmon会显示跟踪。使用的sgen来自
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin
(32-bit sngen.exe) - 为x64构建时,没有跟踪,只有上面提到的错误
我将项目配置设置为将序列化程序创建为OFF并在 x64 中编译程序集。然后我尝试了一个命令行
- 在 -中使用 SGEN 取得了成功
C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\x64
- (请注意 - 这是 64 位 sgen.exe) - 在 x64 程序集上运行 32 位 SGEN 失败。
这些结果得出一个结论:当 VS2012 在Generate Serialization Assemblies设置为ON(auto是一种特殊情况)的情况下编译项目时,它会尝试查找sgen.exe。但是,当您的项目配置设置为为 x64 平台构建时,它无法找到合适的sgen.exe,它本身就是为 x64 构建的。
问题:是否有msbuild配置或注册表设置或其他可以设置为允许 Visual Studio 找到合适的 SGEN 的东西?
我知道解决方法,即发布构建事件并将其关闭,但这不是重点。