Jak dołączyć dokumenty Xml dla biblioteki klas w pakiecie NuGet?

104

Tworzę pakiet NuGet dla biblioteki klas C # i chciałbym dołączyć do biblioteki wygenerowaną dokumentację XML. To jest mój plik 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>

Kiedy buduję pakiet za pomocą tego polecenia :

nuget pack MyLibrary.nuspec

Generuje błąd. Jeśli usunę linię:

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

NuGet.exe pomyślnie tworzy plik nupkg. Mogę nawet rozpakować paczkę i sprawdzić, czy zawartość jest poprawna. Co ja robię źle? Czy plik xml powinien trafić do innego katalogu docelowego?

John Nelson
źródło
Jakiego polecenia używasz do tworzenia pakietu?
Panika pułkownika
@ColonelPanic zaktualizowane pytanie z poleceniem i linkiem do dokumentów.
John Nelson
Dzięki, John. nuget pack library.csprojPakuję csproj bezpośrednio (nie mam nuspec), ale poprawka działa tak samo.
Panika pułkownika

Odpowiedzi:

99

Problem polegał na tym, że nie sprawdziłem opcji „Generuj dokumentację XML” dla konfiguracji kompilacji, której używałem. Ten nuspec jest poprawny.

wprowadź opis obrazu tutaj

John Nelson
źródło
6
Dobrze wiedzieć. Próbowałem swoich sił w użyciu GUI do tworzenia pakietu i próbowałem zmusić mnie do przeniesienia pliku XML do folderu zawartości zamiast do lib. Wydawało się nie w porządku, więc chciałem uzyskać drugą opinię. Cieszę się, że masz ten post. :-)
Mike Loux
12

W .NET Core / Standard możesz to zrobić, edytując plik XML projektu, na przykład:

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

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

Spowoduje to wyświetlenie dokumentacji jako pliku XML obok zestawu wyjściowego.

EDYCJA: Na marginesie, po włączeniu GenerateDocumentationFileprawdopodobnie otrzymasz wiele ostrzeżeń dotyczących publicznych metod, ponieważ nie dodano pełnych tagów dokumentacji. Jeśli chcesz wyłączyć te ostrzeżenia, po prostu dodaj PropertyGroup:

<NoWarn>$(NoWarn);1591</NoWarn>
bytedev
źródło
<GenerateDocumentationFile>daje <DocumentationFile>już wynik, więc myślę, że tylko jeden z nich jest wymagany, zobacz: docs.microsoft.com/en-us/dotnet/csharp/codedoc
Kapé
Określenie <DocumentationFile>siebie pozwala tylko na wydrukowanie pliku w dowolnym miejscu. Jeśli nie podasz tego, myślę, że dosłownie umieszcza to na ścieżce, którą podałem powyżej.
bytedev