我能够找到几个类似的问题并回答,但没有一个答案或确切条件适用于我的情况。
如果我没有引用mixed-mode DLL
,这可以正常工作。如果我引用混合模式DLL,我会收到此错误(xxx只是一个占位符):
SGEN:错误:尝试加载带有的程序集 格式不正确: C:\代码\ XXX \树干\ XXX \共同\ XXX \建立\ winx64 \ lib中\ xxx.dll
这是发出的命令:
C:\ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ bin \ sgen.exe /assembly:C:\code\xxx\trunk\xxx\xxx\obj\x64\Release\xxx.dll / proxytypes /reference:..:common\xxx\build\winx64\lib\xxx.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Configuration.Install.dll / reference:“C:\ Program Files(x86)\ Reference 大会\微软\框架\ v3.5版本\ System.Core.dll” /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.EnterpriseServices.dll /reference:C:\Windows\assembly\GAC_MSIL\System.Management.Automation\1.0.0.0__31bf3856ad364e35\System.Management.Automation.dll / reference:“C:\ Program Files(x86)\ Reference 大会\微软\框架\ 3.0 \ System.Runtime.Serialization.dll” / reference:“C:\ Program Files(x86)\ Reference 大会\微软\框架\ 3.0 \ System.ServiceModel.dll” / reference:“C:\ Program Files(x86)\ Reference 大会\微软\框架\ v3.5版本\ System.Web.Extensions.dll” /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll
有什么想法吗?
答案 0 :(得分:32)
答案 1 :(得分:3)
安装MSBuild Toolset后(对于Visual Studio 2013),此错误也会在构建计算机上弹出。问题是默认情况下只有32位版本的sgen.exe可用。
安装最新的Windows SDK后,问题就消失了,其中包括64位版本的sgen.exe:
http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx
在一个代理(机器)上我也需要安装旧版本:
http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx
答案 2 :(得分:2)
在关闭序列化程序集时,将解决问题,它只是解决方法 - 最终你将以较慢的启动时间来支付它。问题是您必须从x64 SDK调用sgen.exe(如果您的目标是x64)。如果你正在使用msbuild,请像这样设置正确的sgen路径:
<MSBuild Projects="$(MSBuildProjectLocation)" Targets="Build"
Properties="....
SGenToolPath=C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\x64;"
/>
答案 3 :(得分:2)
我们刚刚对项目文件(csproj)中的Release配置进行了修改,并将SDK路径设置为x64版本:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
...
...
<GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
<SDK40ToolsPath>C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64</SDK40ToolsPath>
</PropertyGroup>