14

我能够找到几个类似的问题被问和回答,但没有一个答案或确切的条件适用于我的情况。

  1. 我有一个为 x64 构建的 .NET 3.5 项目。
  2. 我还有一个 x64 混合模式参考(也针对 .NET 3.5)。
  3. 在 Visual Studio 2008 中,我创建了一个 Web 引用,它使 SGEN 在发布构建期间执行以创建帮助程序 DLL。

如果我不引用mixed-mode DLL,这可以正常工作。如果我确实引用了混合模式 DLL,则会收到此错误(xxx 只是一个占位符):

SGEN:错误:尝试加载格式不正确的程序集:C:\code\xxx\trunk\xxx\common\xxx\build\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 Assemblies\Microsoft\Framework\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 Assemblies\Microsoft\Framework\v3.0\System.Runtime.Serialization.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.0\ System.ServiceModel.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\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/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/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

有任何想法吗?

4

4 回答 4

33

您是否尝试过按照此 msdn 帖子中的建议更改Generate serialization assembly为?就我而言,那是票。Off

只需转到您的项目属性,它就在构建下。

项目属性 - 构建

于 2013-02-28T02:26:11.443 回答
4

安装MSBuild 工具集(适用于 Visual Studio 2013)后,此错误也会在构建机器上弹出。问题是默认情况下只有 32 位版本的 sgen.exe 可用。

安装包含 64 位版本 sgen.exe的最新Windows SDK后问题消失:

http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx

在一台代理(机器)上,我还需要安装旧版本:

http://msdn.microsoft.com/en-us/windows/desktop/hh852363.aspx

于 2014-07-18T14:48:19.410 回答
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;" 
/>
于 2013-12-12T12:38:50.160 回答
2

这是Ondrej 答案的替代方案。

我们只是在项目文件(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>
于 2015-06-04T15:11:36.533 回答