Комплексное управление зависимостями NuGet - PullRequest
0 голосов
/ 06 июня 2018

Я хочу предоставить пакет NuGet для проекта, который я создал, но у меня есть некоторые проблемы с «скрытием» зависимостей.

Возможна ли следующая конфигурация?

  • Невключить ссылки на проекты в качестве зависимостей NuGet.
  • Разрешить потребителям использовать код из зависимости A.
  • Полностью скрыть зависимость B от потребителя.

Чтобы удалить все зависимости NuGetи чтобы скрыть зависимости типа B, я попытался сделать следующее:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

<!-- PrivateAssets to remove NuGet depencies -->
<ItemGroup>
    <ProjectReference Include="..\A.csproj" PrivateAssets="All" />
    <ProjectReference Include="..\B.csproj" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
    <BuildOutputInPackage Include="$(OutputPath)A.dll" />
    <!-- B is hidden, so not included -->
</ItemGroup>

Проблема заключается в том, что во время выполнения происходит сбой внутреннего кода NuGet, поскольку он не может найти зависимость B и ее зависимости.(Это очевидно, потому что DLL там нет.)

1 Ответ

0 голосов
/ 06 июня 2018

PrivateAssets="All" действительно имеет смысл, только если у вас есть зависимость времени сборки от этого пакета.

То, что вы хотите, это контролировать поток активов B в сам проект.Это означает, что вы хотите запретить потребителям кодировать против B.

. Для этого можно использовать ExcludeAssets="compile" вместо PrivateAssets.

https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#controlling-dependency-assets

Таким образом, у вас будет следующее:

<ItemGroup>
    <ProjectReference Include="..\A.csproj"/>
    <ProjectReference Include="..\B.csproj" ExcludeAssets="compile" />
</ItemGroup>
...