Включить сторонние библиотеки 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
создать пакет, в результате чего:
Из того, что я прочитал в документации ( 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>