web-dev-qa-db-fra.com

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

Je crée un package NuGet pour une bibliothèque de classe C #, et je voudrais inclure la documentation Xml générée avec la bibliothèque. Voici 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>

Quand je compile le paquet 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 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?

97
John Nelson

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.

enter image description here

94
John Nelson

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 activez GenerateDocumentationFile, vous obtiendrez 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>
9
bytedev