Пакет Nuget для Visual Studio 2017 исключает ссылку на проект как другую ссылку на nuget, вместо этого добавляет сборку

Когда мы создаем пакет nuget в Visual Studio 2017, он по умолчанию добавляет ссылки на проект как еще одну ссылку nuget. Как мы можем отключить это при создании пакета и вместо этого:

  • Выберите другое имя пакета
  • вместо этого включите dll проекта при создании пакета

person Satyajit    schedule 23.09.2017    source источник


Ответы (1)


PackageReference можно пометить PrivateAssets="All", чтобы гарантировать, что он не станет зависимостью NuGet потребляющей библиотеки при упаковке. Затем потребляющая библиотека может использовать пользовательскую цель для добавления файлов в созданный пакет nuget. Полный пример для файла csproj может выглядеть так:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);IncludeP2PAssets</TargetsForTfmSpecificBuildOutput>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\testprivatelib\testprivatelib.csproj" PrivateAssets="All" />
  </ItemGroup>

  <Target Name="IncludeP2PAssets">
    <ItemGroup>
      <BuildOutputInPackage Include="$(OutputPath)\testprivatelib.dll" />
    </ItemGroup>
  </Target>
</Project>

Где testprivatelib.csproj — это проект, который создает библиотеку DLL, которую вы хотите дополнительно включить в файл .nupkg и не публиковать дополнительный пакет NuGet для указанного проекта.

Указать разные пакеты NuGet сложнее. Требуется вручную создать файл .nuspec, используя его для упаковки пакета NuGet. Вы можете увидеть пример того, как это можно сделать, по адресу https://github.com/dasMulli/nuget-include-p2p-example/tree/master/LibALibA.csproj настроен на использование LibA.nuspec при вызове dotnet pack.

person Martin Ullrich    schedule 24.09.2017