Ошибка SGEN: была предпринята попытка загрузить сборку с неверным форматом в VS2008
Мне удалось найти несколько похожих вопросов, которые задавали и отвечали, но ни один из ответов или точных условий не относился к моей ситуации.
- У меня есть проект.NET 3.5 для x64.
- У меня также есть ссылка на смешанный режим x64 (также нацеленный на.NET 3.5).
- В 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;"
/>