Когда мы создаем пакет nuget в Visual Studio 2017, он по умолчанию добавляет ссылки на проект как еще одну ссылку nuget. Как мы можем отключить это при создании пакета и вместо этого:
- Выберите другое имя пакета
- вместо этого включите dll проекта при создании пакета
Ответ 1 · рейтинг 12 · Martin Ullrich
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/LibA - LibA.csproj настроен на использование LibA.nuspec при вызове dotnet pack.