Не включайте зависимости от пакетов.файл конфигурации при создании пакета NuGet
я использую Nuget для создания пакетов. Я хотел бы создать пакет, который не содержит никаких зависимостей (в .nuspec
) файл для любых других пакетов NuGet. Мой проект имеет зависимости пакета NuGet, определенные в его .
сначала я создаю ...
C:codeMySolution>.nugetnuget.exe spec MyProjectMyProject.csproj
я редактирую сгенерированный .nuspec
файл должен быть минимальным, без зависимостей.
<?xml version="1.0"?>
<package >
<metadata>
<id>MyProject</id>
<version>1.2.3</version>
<title>MyProject</title>
<authors>Example</authors>
<owners>Example</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Example</description>
<copyright>Copyright 2013 Example</copyright>
<tags>example</tags>
<dependencies />
</metadata>
</package>
затем я создаю решение и создаю NuGet пакет...
C:codeMySolution>.nugetnuget.exe pack MyProjectMyProject.csproj -Verbosity detailed
вот вывод этой команды...
Attempting to build package from 'MyProject.csproj'.
Packing files from 'C:codeMySolutionMyProjectbinDebug'.
Using 'MyProject.nuspec' for metadata.
Found packages.config. Using packages listed as dependencies
Id: MyProject
Version: 1.2.3
Authors: Example
Description: Example
Tags: example
Dependencies: Google.ProtocolBuffers (= 2.4.1.473)
Added file 'libnet40MyProject.dll'.
Successfully created package 'C:codeMySolutionMyProject.1.2.3.nupkg'.
на .nupkg
созданный пакет имеет .nuspec
файл, содержащийся в нем, но он включает раздел зависимостей, которого у меня не было в оригинале ...
<dependencies>
<dependency id="Google.ProtocolBuffers" version="2.4.1.473" />
</dependencies>
Я верю, что это происходит из-за этого... (из вывода выше)
Found packages.config. Using packages listed as dependencies
как я могу сделать NuGet не автоматическое разрешение зависимостей и вставка их в .nuspec
файл, который генерируется из ?
в настоящее время я использую NuGet 2.2. Кроме того, я не думаю, что это поведение произошло в старой версии NuGet; это новая "функция"? Я не смог найти никакой документации, описывающей эту "функцию" или когда она была реализована.
6 ответов
в версии 2.7 есть опция developmentDependency, которая может быть установлена в пакет.config, чтобы избежать зависимости.
исключение зависимостей разработки при создании пакетов
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="jQuery" version="1.5.2" />
<package id="netfx-Guard" version="1.3.3.2" developmentDependency="true" />
<package id="microsoft-web-helpers" version="1.15" />
</packages>
предотвратите зависимость вашего пакета от других пакетов
по состоянию на NuGet 2.7 появился новый атрибут developmentDependency что может быть добавлен package
узел в вашем проекте . Поэтому, если ваш проект включает пакет NuGet, который вы не хотите включать в свой пакет NuGet в качестве зависимости, вы можете использовать этот атрибут следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="CreateNewNuGetPackageFromProjectAfterEachBuild" version="1.8.1-Prerelease1" targetFramework="net45" developmentDependency="true" />
</packages>
важный бит, который вам нужно добавить здесь developmentDependency="true"
.
предотвратите, чтобы ваш пакет разработки зависел от других пакетов
если вы создаете пакет разработки NuGet для других пользователей, который, как вы знаете, они не захотят иметь в качестве зависимости в своих пакетах, вы можете избежать необходимости вручную добавлять этот атрибут в свои пакеты.файл конфигурации с помощью NuGet 2.8
если вы используете PackageReference
элемент вместо package.config
файл, вот решение:
<PackageReference Include="Nerdbank.GitVersioning" Version="1.5.28-rc" PrivateAssets="All" />
или
<PackageReference Include="Nerdbank.GitVersioning" Version="1.5.28-rc">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
вы можете явно указать, какие файлы включать, а затем запустить команду pack в самом файле nuspec.
<?xml version="1.0"?>
<package >
<metadata>
<id>MyProject</id>
<version>1.2.3</version>
<title>MyProject</title>
<authors>Example</authors>
<owners>Example</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Example</description>
<copyright>Copyright 2013 Example</copyright>
<tags>example</tags>
<dependencies />
</metadata>
<files>
<file src="bin\Release\MyProject.dll" target="lib" />
</files>
</package>
вы должны установить атрибут src с путем, который относительно файла nuspec здесь. Затем вы можете запустить команду pack.
nuget.exe pack MyProject\MyProject.nuspec
согласно выпуску № 1956 (https://nuget.codeplex.com/workitem/1956) и запрос 3998 тяги(https://nuget.codeplex.com/SourceControl/network/forks/adamralph/nuget/contribution/3998) Эта функция была включена в 2.4-релиз версия 2.7.
однако я не могу найти документацию об этой функции, и я до сих пор не понял, как ее использовать. Пожалуйста, обновите этот ответ, если кто-нибудь знает.
Update: выпуск № 1956 был обновлен разработчиком. Эта функция не была включена в выпуск 2.4, но отложена до предстоящего выпуска 2.7. Вот почему это еще не задокументировано.
Я не уверен, почему вы хотите игнорировать зависимости, которые требует ваш пакет NuGet для запуска, но вы думали об использовании Проводник Пакетов NuGet инструмент вместо создания вашего пакета?