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?

John Nelson
quelle
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

John Nelson
quelle
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>
bytedev
quelle
<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