Создать пакет Nuget без его зависимостей для добавления в качестве ссылок - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно создать пакет Nuget из моего проекта библиотеки .net Framework.

Проблема в том, что мой проект зависит от многих других библиотек, которые я не хочу, чтобы мои пользователи Nuget видели.Поэтому я хочу, чтобы люди установили мой пакет и увидели только dll моего проекта в списке ссылок, тогда как все его зависимости будут добавлены только в папку bin.

На самом деле, это то, что происходит, когда я ссылаюсь на эту dll в любом проекте - я вижу ее в своем списке ссылок, и все ее зависимости просто копируются в папку bin сразу после сборки.Можно ли добиться такого поведения с помощью этого проекта как Nuget?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Создание пакета Nuget без его зависимостей для добавления в качестве ссылок

Поскольку вы не хотите, чтобы пользователи Nuget видели другие библиотеки DLL, вы не можете установить этот файл библиотеки DLL какзависимости, которые будут добавлены в список ссылок по умолчанию.

Чтобы решить эту проблему, нам нужно добавить файл dll в другую папку в файле .nuspec и добавить функцию для копирования этого файла dll в папку bin, когда мы добавим этот пакет nuget в проект.Вы можете выполнить следующие шаги:

  1. Добавить файл xx.targets в папку вашего проекта (тот, который вы использовали для создания пакета nuget), убедитесь, что имя целевого файла совпадаетимя в качестве идентификатора пакета (TestDemo - это мой идентификатор пакета, поэтому имя .targets равно TestDemo.targets).

  2. Добавьте приведенный ниже код в целевой файл:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     <ItemGroup>
      <None Include="$(MSBuildThisFileDirectory)*.dll">
         <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </None>
     </ItemGroup>
    </Project>
    

Примечание. Путь «$ (MSBuildThisFileDirectory)» должен быть относительным путем, если вы не знакомы с ним, вы можете использовать абсолютный путь.

В файле nuspec добавьте требуемый файл в каталог Build вместе с файлом целей.

  <files>
    <file src="<ThoseDllsPath>\*.dll" target="Build\" />
    <file src="TestDemo.targets" target="Build\" />
    <file src="bin\Debug\TestDemo.dll" target="lib\462" />
  </files>

Упакуйте этот пакет, затем добавьте его в другой проект втест, он работает нормально.

enter image description here

enter image description here

Надеюсь, что этопомогает.

0 голосов
/ 22 октября 2018

Если вы используете package.config для управления зависимостями NuGet вашей библиотеки и собираете nupkg с помощью nuget.exe pack, то я считаю, что вам нужно сгенерировать свой собственный файл nuspec и просто не добавлять свои зависимости времени сборки какзависимость от вашего пакета.

Если вы используете PackageReference, то вы можете использовать PrivateAssets

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
        <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <!-- ... -->
</ItemGroup>
...