sgen.exe non riesce durante la compilazione
-
08-06-2019 - |
Domanda
Dopo aver cambiato la directory di output di un progetto di visual studio ha iniziato a non riuscire a costruire con un errore molto simile:
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.
Ho cambiato la directory di output di destinazione/win_x32/release/risultati, ma il percorso in sgen non sembra essere stato aggiornato.Sembra che ci sia alcun riferimento al progetto di che percorso è passato in sgen quindi sono sicuri di come risolvere il problema.Come soluzione mi hanno disattivato la serializzazione generazione, ma sarebbe bello risolvere il problema sottostante.Qualcuno ha altro ha visto questo?
Soluzione
vedere msdn per le opzioni sgen.exe [hai la riga di comando, si può giocare con essa manualmente...eliminare vostro .XmlSerializers.dll o l'uso della forza se]
Oggi mi sono anche imbattuto in come più specificare manualmente il sgen opzioni.Ho voluto questo per non utilizzare il proxy /switch, ma sembra che può consentono di specificare la directory di output.Io non so abbastanza di msbuild per rendere impressionante, ma questo dovrebbe iniziare [apri il tuo .csproj/.vbproj per le non-editor di visual studio a scelta, guarda in basso e si dovrebbe essere in grado di capire come/dove questo va]
[il seguente codice ha avuto UseProxyTypes impostare a true per la vostra convenienza]
<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>
Altri suggerimenti
Se si stanno avendo questo problema, mentre costruire la vostra VS.NET progetto in modalità di Rilascio ecco la soluzione:
Vai al progetto, proprietà e fare clic sulla scheda di generazione e impostare il valore di "Generare Assembly di Serializzazione a discesa" su "Off".
Sgen.exe è "Il Serializzatore XML Generator crea un assembly di serializzazione XML per i tipi in un assembly specificato al fine di migliorare le prestazioni di avvio di un XmlSerializer quando serializza o deserializza oggetti dei tipi specificati." (MSDN)
Io non ho visto questo problema particolare, ma di recente, per noi, un "C1001:Errore interno del compilatore" tipo crash da cl.exe è stato fissato dopo l'installazione di alcuni casuali e indipendenti (o almeno così pensavamo) aggiornamenti di sicurezza di Windows.
Sapevamo che il codice non mandare in crash il compilatore su altre macchine che utilizzano la stessa versione e service pack di Visual Studio, ma siamo stati davvero stringendo cannucce quando abbiamo provato a fare aggiornamenti di sicurezza di Windows.
Sembra abbastanza ragionevole per me, a meno che qualcosa è imponente 4096 limite di caratteri [elenco 4020 caratteri]
4096 limite mi sembra un po ' assurdo, sarebbe 2048 o 32767 o 8192 dalle cose che ho trovato con la ricerca per la riga di comando limiti.
Mi sono imbattuto in questo problema quando ho avuto a che fare riferimento a un assembly di un progetto di sito web del GAC che erano state disinstallate, e per qualche motivo che riferimento ha attivato un assembly di serializzazione generazione, e sgen soffocato di riferimento (in quanto non esisteva più).Dopo la rimozione del riferimento e girando assembly di serializzazione generazione di Fuori, non ho più avuto il problema.