Включить сторонние библиотеки DLL в пакет NuGet, созданный из VS csproj

Я пытаюсь создать пакет NuGet из проекта VS 2017, который содержит ссылку на стороннюю DLL (Kendo.mvc.dll). Неважно, что я пытаюсь, я не могу получить nuget pack чтобы автоматически включить эту DLL в папку lib моего пакета NuGet.

Я изначально создал .nuspec файл из командной строки с командой nuget spec [project's name and path].csproj, Затем я подправил настройки этого файла, что привело к следующему файлу.nuspec:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>our names</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>the description</description>
    <releaseNotes>First release</releaseNotes>
    <copyright>Copyright 2018</copyright>
    <tags>entity-framework-6 mvc5</tags>
  </metadata>
</package>

Я тогда использовал nuget pack создать пакет, в результате чего:

Содержимое пакета, показывающее, что не была включена сторонняя DLL

Из того, что я прочитал в документации ( MS Docs - Создание пакетов NuGet), я ожидал nuget pack автоматически включить в пакет любые библиотеки не из источника, на которые есть ссылки в проекте, но этого не происходит?

Я попробовал следующее, чтобы увидеть, если это имеет какое-либо значение, но все безрезультатно:

  • Добавление lib папку в корне моего проекта и поместив туда DLL (и немного поэкспериментировал с изменением настроек Build Action и Copy to Output Directory). Это создало папку lib в папке Content в пакете NuGet, а не добавляло DLL в ту же lib папка, содержащая DLL сборки. Я сделал это, потому что документы MS говорят о файловой структуре, основанной на соглашениях.
  • Ссылка на DLL из папки в C:\Program Files и установка свойства Copy Local для DLL в true в свойствах

Этот вопрос говорит о добавлении отдельного элемента для сторонней библиотеки DLL, который, как я предполагаю, относится к добавлению файлов явно в .nuspec файл до генерации пакета, например

  <files>
    <file src="bin\Debug\Kendo.Mvc.???" target="lib\net461" />
  </files>

Это работает, но не должно ли это быть добавлено автоматически, если это необходимо при создании .nuspec файл из csproj файл?

1 ответ

Решение

но не следует ли добавить это автоматически, если это необходимо при создании файла.nuspec из файла csproj?

Да, библиотеки DLL, не связанные с nuget, не были добавлены автоматически по умолчанию при создании .nuspec файл из .csproj файл.

Когда мы генерируем .nuspec файл из .csproj файл, .nuspec включает только основную информацию, например, заголовок, описание и т. д. Вы можете получить эту информацию из Информация о сборке, Свойства-> Приложение-> Информация о сборке:

Но он не включает стороннюю DLL по умолчанию.

Итак, чтобы включить сторонние DLL, нам нужно вручную добавить файлы в .nuspec файл, просто как то, что вы сделали.

Проверьте создание пакета Nuget из DLL для получения более подробной информации.

Кстати, если сторонняя DLL является библиотекой DLL с исходным кодом, упоминаемой в проекте, вы можете использовать параметр -IncludeReferencedProjects добавить его автоматически при создании файла.nuspec из файла csproj.

Документ: команда pack (NuGet CLI)

Надеюсь это поможет.

Если вы хотите сделать это через Visual Studio или dotnet, вы можете отредактировать файл csproj, добавить ItemGroup для включения dll, как показано ниже: Это упакует другие dll вместе с dll вашего текущего проекта в пакет nuget.

<ItemGroup>
    <Content Include="<path to other dll>">
        <Pack>true</Pack>
        <PackagePath>lib\$(TargetFramework)</PackagePath>
    </Content>
</ItemGroup>
Другие вопросы по тегам