Wie fügen Sie XML-Dokumente für eine Klassenbibliothek in ein NuGet-Paket ein?


102

Ich erstelle ein NuGet-Paket für eine C # -Klassenbibliothek und möchte der Bibliothek eine generierte XML-Dokumentation hinzufügen. Dies ist meine Nuspec-Datei:

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    <id>MyLibrary</id>
    <version>1.0.0.0</version>
    <authors>John Nelson</authors>
    <language>en-US</language>
    <description>A C# class library</description>
  </metadata>
  <files>
    <file src="..\..\build\MyLibrary.dll" target="lib\Net40" />
    <file src="..\..\build\MyLibrary.xml" target="lib\Net40" />
  </files>
</package>

Wenn ich das Paket mit diesem Befehl erstelle :

nuget pack MyLibrary.nuspec

Es wird ein Fehler generiert. Wenn ich die Zeile entferne:

<file src="..\..\build\MyLibrary.xml" target="lib\Net40" />

NuGet.exe erstellt das nupkg erfolgreich. Ich kann das Paket sogar entpacken und überprüfen, ob der Inhalt korrekt ist. Was mache ich falsch? Sollte die XML-Datei in ein anderes Zielverzeichnis verschoben werden?


Mit welchem ​​Befehl erstellen Sie das Paket?
— Colonel Panic

@ColonelPanic aktualisierte Frage mit Befehl und Link zu Dokumenten.
— John Nelson

Danke John. Ich packe ein csproj direkt nuget pack library.csproj(ich habe kein nuspec), aber das Update funktioniert genauso.
— Colonel Panic

Antworten:


97

Das Problem war, dass ich "XML-Dokumentation generieren" für die von mir verwendete Build-Konfiguration nicht überprüft habe. Dieser Nuspec ist richtig.

Geben Sie hier die Bildbeschreibung ein


6
Gut zu wissen. Ich habe versucht, mithilfe der GUI ein Paket zu erstellen, und ich habe versucht, die XML-Datei anstelle von lib in den Inhaltsordner zu verschieben. Schien nicht richtig zu sein, also wollte ich eine zweite Meinung einholen. Ich bin froh, dass du diesen Beitrag hattest. :-)
— Mike Loux

11

In .NET Core / Standard können Sie dies tun, indem Sie die XML-Projektdatei bearbeiten, zum Beispiel:

<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
</PropertyGroup>

<PropertyGroup>
    <DocumentationFile>bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml</DocumentationFile>
</PropertyGroup>

Dadurch wird die Dokumentation als XML-Datei neben Ihrer Ausgabebaugruppe ausgegeben.

BEARBEITEN: Als Randnotiz erhalten Sie nach dem Aktivieren GenerateDocumentationFilewahrscheinlich viele Warnungen zu Ihren öffentlichen Methoden , wenn Sie keine vollständigen Dokumentations-Tags hinzugefügt haben. Wenn Sie diese Warnungen deaktivieren möchten, fügen Sie einfach Folgendes hinzu PropertyGroup:

<NoWarn>$(NoWarn);1591</NoWarn>

<GenerateDocumentationFile>führt zu einem <DocumentationFile>bereits, daher denke ich, dass nur eines von beiden erforderlich ist, siehe: docs.microsoft.com/en-us/dotnet/csharp/codedoc
— Kapé

Wenn Sie sich <DocumentationFile>selbst angeben, können Sie die Datei nur ausgeben, wo immer Sie möchten. Wenn Sie es nicht angeben, wird es meiner Meinung nach buchstäblich in den oben angegebenen Pfad eingefügt.
— Bytedev
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.