Erstellen von Symbolpaketen (.snupkg)
Für ein benutzerfreundliches Debugging sind Debugsymbole erforderlich, weil diese wichtige Informationen anzeigen, wie z. B. die Zuordnung des kompilierten Codes zum Quellcode, die Namen lokaler Variablen und Stapelüberwachungen. Mithilfe von Symbolpaketen (.snupkg) können Sie diese Symbole verteilen und das Debugging Ihrer NuGet-Pakete optimieren.
Beachten Sie, dass ein Symbolpaket nicht die einzige Strategie ist, mit der die Debugsymbole den Consumern Ihrer Bibliothek zur Verfügung gestellt werden können. Sie können auch mit der folgenden Projekteigenschaft in die
dll
- oder dieexe
-Datei eingebettet werdenembed
:<DebugType>embedded</DebugType>
Voraussetzungen
nuget.exe, Version 4.9.0 oder höher oder die .NET-CLI, Version 2.2.0 oder höher, da diese die erforderlichen NuGet-Protokolle implementieren.
Erstellen eines Symbolpakets
Wenn Sie die .NET-CLI oder MSBuild verwenden, müssen Sie die Eigenschaften IncludeSymbols
und SymbolPackageFormat
festlegen, um zusätzlich zur NUPKG-Datei eine SNUPKG-Datei zu erstellen.
Fügen Sie entweder die folgenden Eigenschaften zur CSPROJ-Datei hinzu:
<PropertyGroup> <IncludeSymbols>true</IncludeSymbols> <SymbolPackageFormat>snupkg</SymbolPackageFormat> </PropertyGroup>
Geben Sie alternativ diese Eigenschaften in der Befehlszeile an:
dotnet pack MyPackage.csproj -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
oder
msbuild MyPackage.csproj /t:pack /p:IncludeSymbols=true /p:SymbolPackageFormat=snupkg
Wenn Sie „NuGet.exe“ verwenden, können Sie folgende Befehle verwenden, um eine SNUPKG-Datei zusätzlich zur NUPKG-Datei zu erstellen:
nuget pack MyPackage.nuspec -Symbols -SymbolPackageFormat snupkg
nuget pack MyPackage.csproj -Symbols -SymbolPackageFormat snupkg
Die Eigenschaft SymbolPackageFormat
kann einen von zwei Werten besitzen: symbols.nupkg
(Standard) oder snupkg
. Wenn diese Eigenschaft nicht festgelegt wurde, wird ein älteres Legacypaket erstellt.
Hinweis
Das ältere Format .symbols.nupkg
wird noch immer unterstützt, jedoch nur aus Kompatibilitätsgründen (z. B. native Pakete). Weitere Informationen finden Sie unter Erstellen von Legacysymbolpaketen (.symbols.nupkg). Der NuGet.org-Symbolserver akzeptiert nur das neue Symbolpaketformat .snupkg
.
Veröffentlichen eines Symbolpakets
Hinweis
Azure DevOps Artifacts unterstützt derzeit nicht das Debuggen über .snupkg
-Dateien.
Speichern Sie zunächst der Einfachheit halber Ihren API-Schlüssel mit NuGet (weitere Informationen unter publish a package (Veröffentlichen eines Pakets)).
nuget SetApiKey Your-API-Key
Nachdem Sie Ihr primäres Paket auf nuget.org veröffentlicht haben, übertragen Sie Ihr Symbol mithilfe von Push wie hier dargestellt:
nuget push MyPackage.snupkg
Sie können mit dem folgenden Befehl auch das primäre Paket und Symbolpakete gleichzeitig mithilfe von Push übertragen, um Zeit zu sparen. Die NUPKG- und SNUPKG-Dateien müssen jeweils im aktuellen Ordner vorhanden sein.
nuget push MyPackage.nupkg
NuGet veröffentlicht beide Pakete auf nuget.org. MyPackage.nupkg
wird zuerst veröffentlicht, gefolgt von MyPackage.snupkg
.
Hinweis
Wenn das Symbolpaket nicht veröffentlicht wird, vergewissern Sie sich, dass Sie die NuGet.org-Quelle folgendermaßen konfiguriert haben: https://api.nuget.org/v3/index.json
. Die Veröffentlichung des Symbolpakets wird nur von der NuGet V3-API unterstützt.
NuGet.org-Symbolserver
NuGet.org unterstützt das eigene Symbolserverrepository und akzeptiert ausschließlich das neue Symbolpaketformat .snupkg
. Paketverbraucher können die auf nuget.org-Symbolservern veröffentlichen Symbole verwenden, indem sie https://symbols.nuget.org/download/symbols
zu ihren Symbolquellen in Visual Studio hinzufügen, wodurch Paketcode im Visual Studio Debugger schrittweise verwendet werden kann. Weitere Einzelheiten zu diesem Prozess finden Sie unter Angeben von Symbol- (PDB) und Quelldateien im Visual Studio Debugger.
Einschränkungen für NuGet.org-Symbolpakete
NuGet.org weist die folgenden Einschränkungen für Symbolpakete auf:
- Nur die folgenden Dateierweiterungen sind in Symbolpaketen zulässig:
.pdb
,.nuspec
,.xml
,.psmdcp
,.rels
,.p7s
- Auf dem NuGet-Symbolserver werden nur verwaltete Portable PDB-Dateien unterstützt.
- Die PDB-Dateien und ihre zugehörigen NUPKG-DLLs müssen mit dem Compiler in Visual Studio 15.9 oder höher erstellt worden sein (weitere Informationen unter PDB crypto hash (Kryptografiehash für PDB-Dateien)).
Bei Symbol Paketen, die auf NuGet.org veröffentlicht werden, tritt bei der Überprüfung ein Fehler auf, wenn diese Bedingungen nicht erfüllt sind.
Hinweis
Native Projekte wie C++-Projekte erzeugen Windows-PDB-Dateien anstelle von portierbaren PDB-Dateien. Diese werden vom Symbolserver von NuGet.org nicht unterstützt. Verwenden Sie stattdessen Legacysymbolpakete.
Symbolpaketvalidierung und -indizierung
Per Push an NuGet.org übertragene Symbolpakete werden verschiedenen Prüfungen unterzogen, darunter eine Prüfung auf Schadsoftware. Wenn bei einem Paket ein Fehler bei der Überprüfung auftritt, wird auf dessen Paketdetailseite eine Fehlermeldung angezeigt. Darüber hinaus erhalten die Besitzer des Pakets eine E-Mail mit Anweisungen zum Beheben der erkannten Probleme.
Wenn das Symbolpaket alle Überprüfungen bestanden hat, werden die Symbole von den Symbolservern von nuget.org indiziert und sind für die Verwendung verfügbar.
Die Validierung und Indizierung eines Pakets nimmt für gewöhnlich unter 15 Minuten in Anspruch. Wenn das Veröffentlichen des Pakets länger als erwartet dauert, besuchen Sie status.nuget.org, um zu überprüfen, ob gerade eine Störung auf nuget.org vorliegt. Wenn alle Systeme in Betrieb sind und das Paket innerhalb einer Stunde nicht erfolgreich veröffentlicht wurde, melden Sie sich auf nuget.org an, und informieren Sie uns über den Link zum Support auf der Paketdetailseite.
Symbolpaketstruktur
Das Symbolpaket (.snupkg) weist die folgenden Eigenschaften auf:
Die SNUPKG-Datei hat dieselbe ID und Version wie das entsprechende NuGet-Paket (.nupkg).
Das Symbolpaket (.snupkg) weist bei allen DLL- oder EXE-Dateien dieselbe Ordnerstruktur wie die das NuGet-Paket (.nupkg) auf. Der einzige Unterschied ist, dass anstelle der DLL-/EXE-Dateien die entsprechenden PDB-Dateien in dieselbe Ordnerhierarchie aufgenommen werden. Dateien und Ordner mit anderen Erweiterungen als PDB werden aus der SNUPKG-Datei ausgeschlossen.
Die NUSPEC-Datei des Symbolpakets ist vom Pakettyp
SymbolsPackage
:<packageTypes> <packageType name="SymbolsPackage"/> </packageTypes>
Wenn sich ein Autor dazu entscheidet, eine benutzerdefinierte NUSPEC-Datei für die Erstellung von NUPKG- und SNUPKG-Dateien zu verwenden, muss die SNUPKG-Datei über die gleiche Ordnerhierarchie und die gleichen Dateien wie unter Punkt 2 beschrieben verfügen.
Die folgenden Felder werden aus der NUSPEC-Datei von SNUPKG ausgeschlossen:
authors
,owners
,requireLicenseAcceptance
,license type
,licenseUrl
undicon
.Verwenden Sie nicht das
<license>
-Element. Eine SNUPKG-Datei wird von der gleichen Lizenz abgedeckt wie die entsprechende NUPKG-Datei.
Weitere Informationen
Erwägen Sie die Verwendung von SourceLink, um das Debuggen des Quellcodes von .NET-Assemblys zu aktivieren. Weitere Informationen finden Sie in der SourceLink-Anleitung.
Weitere Informationen zu Symbolpaketen finden Sie in den Entwurfsspezifikationen für NuGet Package Debugging & Symbols Improvements (Debuggen von NuGet-Paketen und Verbesserungen bei Symbolen).