Как включить XML-документы для библиотеки классов в пакет NuGet?

Я создаю пакет NuGet для библиотеки классов C #, и я хотел бы включить сгенерированную документацию Xml в библиотеку. Это мой файл 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>

Когда я создаю пакет с помощью этой команды:

nuget pack MyLibrary.nuspec

Выдает ошибку. Если я удалю строку:

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

NuGet.exe успешно создает файл nupkg. Я даже могу распаковать пакет и проверить правильность содержимого. Что я делаю неправильно? Должен ли XML-файл перейти в другой целевой каталог?


person John Nelson    schedule 05.03.2011    source источник
comment
Какую команду вы используете для сборки пакета?   -  person Colonel Panic    schedule 14.05.2015
comment
@ColonelPanic обновил вопрос с командой и ссылкой на документы.   -  person John Nelson    schedule 15.05.2015
comment
Спасибо, Джон. Я упаковываю csproj напрямую nuget pack library.csproj (у меня нет nuspec), но исправление работает так же.   -  person Colonel Panic    schedule 15.05.2015


Ответы (2)


Проблема заключалась в том, что я не проверял «Создать XML-документацию» для конфигурации сборки, которую я использовал. Этот NUSPEC правильный.

введите описание изображения здесь

person John Nelson    schedule 07.03.2011
comment
Хорошо знать. Я пробовал использовать графический интерфейс для создания пакета, и он пытался заставить меня переместить XML-файл в папку содержимого вместо библиотеки. Это казалось неправильным, поэтому я хотел узнать второе мнение. Рад, что у вас есть этот пост. :-) - person Mike Loux; 01.01.2012

В .NET Core / Standard это можно сделать, отредактировав XML-файл проекта, например:

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

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

Это выведет документацию в виде файла XML рядом с вашей выходной сборкой.

РЕДАКТИРОВАТЬ: В качестве примечания, как только вы включите GenerateDocumentationFile, вы, вероятно, получите множество предупреждений о своих общедоступных методах за то, что не добавили полные теги документации. Если вы хотите отключить эти предупреждения, просто добавьте PropertyGroup:

<NoWarn>$(NoWarn);1591</NoWarn>
person bytedev    schedule 30.09.2019
comment
<GenerateDocumentationFile> уже приводит к <DocumentationFile>, поэтому я думаю, что требуется только один из них, см. docs.microsoft.com/en-us/dotnet/csharp/codedoc - person Kapé; 10.01.2020
comment
Указание <DocumentationFile> себя просто позволяет вам выводить файл куда угодно. Если вы не укажете его, я думаю, что он буквально помещает его в путь, который я указал выше. - person bytedev; 10.01.2020