Не включайте зависимости от пакетов.файл конфигурации при создании пакета 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>

связанные обсуждения GitHub


вы можете явно указать, какие файлы включать, а затем запустить команду 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 инструмент вместо создания вашего пакета?