sgen.exe не работает во время сборки

После изменения выходного каталога проекта Visual Studio он начал отказывать в сборке с ошибкой, очень похожей на:

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin\sgen.exe /assembly:C:\p4root\Zantaz\trunk\EASDiscovery\EASDiscoveryCaseManagement\obj\Release\EASDiscoveryCaseManagement.dll /proxytypes /reference:C:\p4root\Zantaz\trunk\EASDiscovery\EasDiscovery.Common\target\win_x32\release\results\EASDiscovery.Common.dll /reference:C:\p4root\Zantaz\trunk\EASDiscovery\EasDiscovery.Export\target\win_x32\release\results\EASDiscovery.Export.dll /reference:c:\p4root\Zantaz\trunk\EASDiscovery\ItemCache\target\win_x32\release\results\EasDiscovery.ItemCache.dll /reference:c:\p4root\Zantaz\trunk\EASDiscovery\RetrievalEngine\target\win_x32\release\results\EasDiscovery.RetrievalEngine.dll /reference:C:\p4root\Zantaz\trunk\EASDiscovery\EASDiscoveryJobs\target\win_x32\release\results\EASDiscoveryJobs.dll /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Shared.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.Misc.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinChart.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinDataSource.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinDock.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinEditors.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinGrid.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinListView.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinMaskedEdit.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinStatusBar.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinTabControl.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinToolbars.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.UltraWinTree.v8.1.dll" /reference:"C:\Program Files\Infragistics\NetAdvantage for .NET 2008 Vol. 1 CLR 2.0\Windows Forms\Bin\Infragistics2.Win.v8.1.dll" /reference:"C:\Program Files\Microsoft Visual Studio 8\ReportViewer\Microsoft.ReportViewer.Common.dll" /reference:"C:\Program Files\Microsoft Visual Studio 8\ReportViewer\Microsoft.ReportViewer.WinForms.dll" /reference:C:\p4root\Zantaz\trunk\EASDiscovery\PreviewControl\target\win_x32\release\results\PreviewControl.dll /reference:C:\p4root\Zantaz\trunk\EASDiscovery\Quartz\src\Quartz\target\win_x32\release\results\Scheduler.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.configuration.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Web.Services.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /compiler:/delaysign- 
    Error: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1902,9): error MSB6006: "sgen.exe" exited with code 1.

Я изменил каталог вывода на target / win_x32 / release / results, но путь в sgen, похоже, не был обновлен. Кажется, в проекте нет ссылки на то, какой путь передается в sgen, поэтому я не уверен, как это исправить. В качестве обходного пути я отключил генерацию сериализации, но было бы неплохо исправить основную проблему. Кто-нибудь еще видел это?

9.08.2008 04:57:00
5 ОТВЕТОВ
РЕШЕНИЕ

см. msdn для параметров sgen.exe [у вас есть командная строка, вы можете поиграть с ней вручную ... удалите .XmlSerializers.dll или используйте / force, хотя]

Сегодня я также узнал, как вручную указать параметры sgen . Я хотел, чтобы это не использовало ключ / proxy, но, похоже, он позволяет вам указать каталог вывода. Я не знаю достаточно о msbuild, чтобы сделать его потрясающим, но это должно помочь вам начать [откройте ваш .csproj / .vbproj в вашем невизуальном студийном редакторе, посмотрите внизу, и вы сможете понять, как / где это идет]

[для вашего кода ниже для UseProxyTypes установлено значение true]

<Target Name="GenerateSerializationAssembliesForAllTypes"
  DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource"
  Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)"
  Outputs="$(OutputPath)$(_SGenDllName)">
    <SGen BuildAssemblyName="$(TargetFileName)"
      BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)"
      ShouldGenerateSerializer="true" UseProxyTypes="true"
      KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)"
      DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
        <Output TaskParameter="SerializationAssembly"
          ItemName="SerializationAssembly" />
     </SGen>
</Target>
<!-- <Target Name="BeforeBuild">
</Target> -->
<Target Name="AfterBuild"
  DependsOnTargets="GenerateSerializationAssembliesForAllTypes">
</Target>
8
26.08.2008 02:49:28

Я не видел этой конкретной проблемы, но недавно для нас было исправлено падение типа «C1001: внутренняя ошибка в компиляторе» из cl.exe после установки некоторых случайных и не связанных (как мы думали) обновлений безопасности Windows.

Мы знали, что код не приводил к сбою компилятора на других компьютерах, использующих ту же версию и уровень пакета обновления Visual Studio, но мы действительно цеплялись за соломинку, когда пытались установить обновления безопасности для Windows.

0
9.08.2008 18:58:49

Это выглядит достаточно разумно для меня, если что-то не накладывает ограничение в 4096 символов [вы перечисляете 4020 символов]

Ограничение в 4096 кажется мне немного абсурдным, это было бы 2048, 32767 или 8192 из того, что я нашел при поиске ограничений командной строки.

0
26.08.2008 02:40:07

Я столкнулся с этой проблемой, когда ссылался на сборку в проекте веб-сайта в GAC, которая была удалена с тех пор, и по какой-то причине эта ссылка вызвала генерацию сборки сериализации, и sgen задохнулся от ссылки (так как ее больше не существовало) , После удаления ссылки и перевода поколения сборки сериализации в положение «Выкл» проблема больше не возникала.

0
17.05.2010 20:41:30

Если у вас возникла эта проблема при сборке проекта VS.NET в режиме выпуска, вот решение:

Перейдите в свойства проекта и щелкните вкладку «Сборка» и установите значение «Выключить» для раскрывающегося списка «Создать сборку сериализации».

Sgen.exe - это «Генератор сериализатора XML создает сборку сериализации XML для типов в указанной сборке, чтобы повысить производительность при запуске XmlSerializer при сериализации или десериализации объектов указанных типов». ( MSDN )

21
25.01.2015 04:08:45
Возможные проблемы , которые могут Заставляют Sgen.exe потерпеть неудачу вы можете увидеть выполнения Sgen.exe Повсеместно ЦМД (путь: "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools"(заменить Win версию , версию .NET и системный диск с вашим OFC)) по команде[your_path]sgen.exe /assembly:"my-failed-project-build-path/output-name.dll" /verbose
Kamerton 22.03.2019 13:33:29