sgen.exe falha durante a compilação
-
08-06-2019 - |
Pergunta
Depois de alterar o diretório de saída de um projeto do visual studio começou a falhar compilação com um erro muito parecido:
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.
Eu mudei o diretório de saída para o destino/win_x32/release/resultados, mas o caminho em sgen, não parece ter sido atualizado.Parece que não há nenhuma referência no projeto para o caminho que é passado para sgen, então eu não tenho certeza de como corrigi-lo.Como uma solução alternativa eu ter desativado a serialização de geração, mas seria bom corrigir o problema subjacente.Tem alguém mais viu isso?
Solução
ver msdn para as opções a sgen.exe [você tem a linha de comando, você pode jogar com ele manualmente...excluir o seu .XmlSerializers.dll ou use /força embora]
Hoje fiz também como mais especificar manualmente o sgen opções.Eu queria esse para não usar o proxy mudar, mas parece que você pode especificar o diretório de saída.Eu não sei o suficiente sobre o msbuild para torná-lo incrível, mas isso deve começar [abrir seu .csproj/.vbproj em sua não-visual studio editor de escolha, de olhar no fundo e você deve ser capaz de descobrir como e onde isso vai]
[o código abaixo teve UseProxyTypes definir para true para sua conveniência]
<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>
Outras dicas
Se você estiver tendo esse problema, enquanto a construção de seu VS.NET projeto no modo de edição aqui está a solução:
Vá para o projeto de propriedades e clique no separador Criar e definir o valor de "Gerar o Assembly de Serialização" suspensa para "Off".
Sgen.exe é "O Serializador de XML Gerador cria um assembly de serialização de XML para os tipos em um assembly especificado, a fim de melhorar o desempenho de inicialização de um XmlSerializer quando ele serializa ou desserializa objetos de tipos especificados." (MSDN)
Eu não vi esse problema em particular, mas, recentemente, para nós, um "C1001:Ocorreu um erro interno no compilador" tipo de acidente de cl.exe foi fixado após a instalação de alguns aleatórios e independentes (ou pelo menos assim pensamos) atualizações de segurança do Windows.
Sabíamos que o código não bater o compilador em outras máquinas usando a mesma versão e o nível de service pack do Visual Studio, mas nós estávamos realmente clutching at straws quando tentamos as atualizações de segurança do Windows.
Parece razoável o suficiente para mim, a menos que algo está a impor um 4096 limite de caracteres [lista 4020 caracteres]
Um limite de 4096 me parece um pouco absurdo, seria 2048 32767 ou 8192 de coisas que eu encontrei pesquisando para o comando de linha de limites.
Eu tive esse problema quando eu tivesse feito referência a um assembly em um projeto de site da web no GAC, que tinha sido desde desinstalado, e por alguma razão a referência disparado um assembly de serialização geração, e sgen engasgou com a referência (desde que não mais existia).Depois de remover a referência e transformando assembly de serialização de geração para Fora, eu não tinha mais o problema.