Ошибка SGEN: была предпринята попытка загрузить сборку с неверным форматом в VS2008

Мне удалось найти несколько похожих вопросов, которые задавали и отвечали, но ни один из ответов или точных условий не относился к моей ситуации.

  1. У меня есть проект.NET 3.5 для x64.
  2. У меня также есть ссылка на смешанный режим x64 (также нацеленный на.NET 3.5).
  3. В Visual Studio 2008 я создал веб-ссылку, которая заставляет 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 / ссылка:"C:\Program Files (x86)\ Ссылочные сборки \Microsoft\Framework\v3.5\System.Core.dll" / ссылка:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll / ссылка: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 / ссылка:"C:\Program Files (x86)\ Ссылочные сборки \Microsoft\Framework\v3.0\System.Runtime.Serialization.dll" / ссылка:" C: \ Program Files (x86) \ Ссылочные сборки \Microsoft\Framework\v3.0\System.ServiceModel.dll" / ссылка:" C: \ Program Files (x86) \ Ссылочные сборки \Microsoft\Framework\v3.5\System.Web.Extensions.dll" / ссылка: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 ответа

Вы пытались изменить Generate serialization assembly в Off, как предлагается в этом сообщении MSDN? В моем случае это был билет.

Просто зайдите в свойства вашего проекта, и он находится в Build.

Свойства проекта - Построить

Эта ошибка также появляется на компьютере сборки после установки набора инструментов MSBuild (для 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

Это альтернатива ответу Ondrej Svejdar.

Мы только что внесли изменения в нашу конфигурацию Release в файле проекта (csproj) и установили путь 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>

Если отключить сборку сериализации, это решит проблему, это всего лишь обходной путь - в конце концов вы заплатите за него с более медленным временем запуска. Проблема в том, что вам нужно вызвать sgen.exe из x64 SDK (если вы используете x64). Если вы используете msbuild, установите правильный путь к sgen следующим образом:

<MSBuild Projects="$(MSBuildProjectLocation)" Targets="Build"
    Properties="....
    SGenToolPath=C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin\x64;" 
/>
Другие вопросы по тегам