Bagaimana Anda menyertakan Dokumen Xml untuk perpustakaan kelas dalam paket NuGet?

104

Saya membuat paket NuGet untuk perpustakaan kelas C #, dan saya ingin menyertakan Dokumentasi Xml yang dihasilkan dengan perpustakaan. Ini adalah file nuspec saya:

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

Ketika saya membangun paket dengan perintah ini :

nuget pack MyLibrary.nuspec

Ini menghasilkan kesalahan. Jika saya menghapus garis:

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

NuGet.exe berhasil membuat nupkg. Saya bahkan dapat mengekstrak paketnya, dan memverifikasi bahwa isinya sudah benar. Apa yang saya lakukan salah? Haruskah file xml masuk ke direktori target yang berbeda?

John Nelson
sumber
Perintah apa yang Anda gunakan untuk membuat paket?
Kolonel Panic
@ColonelPanic memperbarui pertanyaan dengan perintah dan tautan ke dokumen.
John Nelson
Terima kasih John. Saya mengemas csproj secara langsung nuget pack library.csproj(saya tidak memiliki nuspec), tetapi perbaikannya berfungsi sama.
Kolonel Panic

Jawaban:

99

Masalahnya adalah saya tidak mencentang "Generate Xml Documentation" untuk konfigurasi build yang saya gunakan. Nuspec itu benar.

masukkan deskripsi gambar di sini

John Nelson
sumber
6
Senang mendengarnya. Saya mencoba menggunakan GUI untuk membuat paket, dan mencoba membuat saya memindahkan file XML ke folder konten alih-alih lib. Sepertinya tidak benar, jadi saya ingin mendapatkan opini kedua. Senang Anda mendapat posting ini. :-)
Mike Loux
12

Di .NET Core / Standard Anda dapat melakukan ini dengan mengedit file XML proyek, misalnya:

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

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

Ini akan menampilkan dokumentasi sebagai file XML di samping perakitan output Anda.

EDIT: Sebagai catatan samping setelah Anda mengaktifkan GenerateDocumentationFileAnda mungkin akan mendapatkan banyak peringatan tentang metode publik Anda karena tidak menambahkan tag dokumentasi lengkap. Jika Anda ingin menonaktifkan peringatan ini cukup tambahkan PropertyGroup:

<NoWarn>$(NoWarn);1591</NoWarn>
bytedev
sumber
<GenerateDocumentationFile>hasilnya <DocumentationFile>sudah, jadi saya pikir hanya satu dari keduanya yang diperlukan, lihat: docs.microsoft.com/en-us/dotnet/csharp/codedoc
Kapé
Menentukan <DocumentationFile>diri Anda sendiri hanya memungkinkan Anda mengeluarkan file di mana pun Anda inginkan. Jika Anda tidak menentukannya, saya pikir itu secara harfiah meletakkannya di jalur yang saya berikan di atas.
bytedev