Comment inclure des documents Xml pour une bibliothèque de classes dans un package NuGet?

104

Je crée un package NuGet pour une bibliothèque de classes C # et je souhaite inclure la documentation Xml générée avec la bibliothèque. Ceci est mon fichier nuspec:

<?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>

Lorsque je construis le package avec cette commande :

nuget pack MyLibrary.nuspec

Cela génère une erreur. Si je supprime la ligne:

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

NuGet.exe crée avec succès le fichier nupkg. Je peux même décompresser le paquet et vérifier que le contenu est correct. Qu'est-ce que je fais mal? Le fichier xml doit-il aller dans un répertoire cible différent?

John Nelson
la source
Quelle commande utilisez-vous pour créer le package?
Colonel Panic
@ColonelPanic question mise à jour avec commande et lien vers les documents.
John Nelson
Merci John. J'emballe un csproj directement nuget pack library.csproj(je n'ai pas de nuspec), mais le correctif fonctionne de la même manière.
Colonel Panic

Réponses:

99

Le problème était que je n'ai pas vérifié "Générer la documentation Xml" pour la configuration de construction que j'utilisais. Ce nuspec est correct.

entrez la description de l'image ici

John Nelson
la source
6
Bon à savoir. J'essayais d'utiliser l'interface graphique pour créer un package, et il essayait de me faire déplacer le fichier XML vers le dossier de contenu au lieu de lib. Cela ne me semblait pas correct, alors je voulais avoir un deuxième avis. Heureux que vous ayez eu ce post. :-)
Mike Loux
12

Dans .NET Core / Standard, vous pouvez le faire en modifiant le fichier XML du projet, par exemple:

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

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

Cela produira la documentation sous forme de fichier XML à côté de votre assembly de sortie.

EDIT: En remarque, une fois que vous l'activez, GenerateDocumentationFilevous recevrez probablement de nombreux avertissements sur vos méthodes publiques pour ne pas avoir ajouté de balises de documentation complètes. Si vous souhaitez désactiver ces avertissements, ajoutez simplement le PropertyGroup:

<NoWarn>$(NoWarn);1591</NoWarn>
bytedev
la source
<GenerateDocumentationFile>résultats dans un <DocumentationFile>déjà, donc je pense qu'un seul des deux est requis, voir: docs.microsoft.com/en-us/dotnet/csharp/codedoc
Kapé
Le fait de <DocumentationFile>vous spécifier vous permet simplement de sortir le fichier où vous le souhaitez. Si vous ne le spécifiez pas, je pense que cela le met littéralement dans le chemin que j'ai fourni ci-dessus.
bytedev