Behebung von sgen.exe Build-Fehlern in Visual Studio

Wenn Sie Probleme mit dem Fehler von sgen.exe während des Build-Vorgangs in Visual Studio hatten, sind Sie nicht allein. Viele Entwickler kämpfen mit diesem Fehler, insbesondere nach der Änderung des Ausgabeverzeichnisses ihres Projekts. Diese Anleitung hilft Ihnen, das Problem zu verstehen und bietet Lösungen, um es effektiv zu beheben.

Verständnis des Problems

Die Änderung des Ausgabeverzeichnisses Ihres Visual Studio-Projekts kann dazu führen, dass sgen.exe mit folgendem Fehler fehlschlägt:

Fehler: Das angegebene Modul konnte nicht gefunden werden. (Ausnahme von HRESULT: 0x8007007E)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1902,9): Fehler MSB6006: "sgen.exe" wurde mit Code 1 beendet.

Dieser Fehler tritt typischerweise auf, weil der Pfad, der in Ihrer Build-Konfiguration an sgen.exe übergeben wird, nach der Änderung des Ausgabeverzeichnisses unverändert bleibt.

Symptome des Problems

  • Der Build-Vorgang schlägt fehl und wirft Fehler im Zusammenhang mit sgen.exe.
  • Selbst nach der Anpassung der Konfigurationseinstellungen bleibt der Fehler bestehen.
  • Temporäre Workaround-Lösungen könnten essentielle Funktionen wie die Serialisierungsgenerierung deaktivieren.

Lösungen für das Problem

Ansatz 1: Manuelle Konfiguration von sgen.exe

Eine effektive Methode zur Behebung dieses Problems besteht darin, die Parameter für sgen.exe manuell in Ihrer Projektdatei anzupassen.

Schritte zur Anpassung der sgen.exe-Optionen:

  1. Öffnen Sie Ihre Projektdatei
    Verwenden Sie einen Texteditor Ihrer Wahl, um die .csproj- oder .vbproj-Datei zu öffnen.

  2. Ändern Sie die Zieldefinitionen
    Sie können ein Ziel hinzufügen, das sgen.exe anweist, die Serialisierungsoptionen explizit festzulegen. Zum Beispiel:

    <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>
    
  3. Ändern Sie die Einstellungen
    Stellen Sie sicher, dass Sie das Attribut UseProxyTypes auf true setzen, um zu steuern, wie Typen serialisiert werden.

  4. Bauen Sie Ihr Projekt neu
    Sobald die Änderungen gespeichert sind, bauen Sie Ihr Projekt in Visual Studio neu, um die neuen Konfigurationen anzuwenden.

Ansatz 2: Dokumentation zurate ziehen

Für ein besseres Verständnis und weitere Anpassungen sollten Sie die offizielle MSDN-Dokumentation zu sgen.exe konsultieren, wo Sie detaillierte Optionen und Parameter für das Tool finden können.

Eine weitere Ressource finden Sie in diesem Blog-Beitrag, der die Feinheiten von sgen und Tipps zur effektiven Verwaltung der Serialisierung behandelt.

Weitere Empfehlungen

  • Löschen Sie vorherige .XmlSerializers.dll
    Wenn Sie weiterhin Probleme haben, sollten Sie .XmlSerializers.dll-Dateien im Ausgabeverzeichnis löschen, um einen sauberen Zustand zu gewährleisten.

  • Überprüfen Sie die richtigen Referenzen
    Stellen Sie sicher, dass alle Pfade zu abhängigen Assemblies nach der Änderung des Ausgabestandorts weiterhin gültig sind.

Fazit

Fehler bei sgen.exe können frustrierend sein, insbesondere bei engen Entwicklungszeitplänen. Durch die Anpassung Ihrer Projektdatei und die sorgfältige Verwaltung der Konfigurationen können Sie diese Probleme effizient lösen. Denken Sie daran, Sicherungskopien Ihrer ursprünglichen Projektdateien zu erstellen, bevor Sie umfangreiche Änderungen vornehmen.

Mit diesen Strategien sollten Sie in der Lage sein, zukünftige Build-Fehler im Zusammenhang mit sgen.exe in Visual Studio zu bewältigen und zu verhindern!