Отключить транзитивную зависимость PackageReference для конкретного проекта MsBuild - PullRequest
0 голосов
/ 06 сентября 2018

Я перевожу проект MsBuild csproj старого стиля в формат PackageReference и столкнулся с проблемой транзитивных зависимостей.

Рассмотрим следующее Проект A ссылочные пакеты NuGet B и C, каждый из которых содержит одну отдельную сборку с использованием PackageReference. В проекте сборки A используется объединение IL для включения B в качестве общедоступных символов в сборку A и C в качестве интернализованных символов. Проект D имеет ссылку на проект A.

В случае переходных зависимостей D к ссылкам A, B и C. При сборке D, ошибки компиляции типа ошибка CS0433: тип «X» существует как в «A», так и в «B» происходят.

Есть ли способ заставить D не добавлять явную ссылку на B или C в сценарии выше?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

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

<Target Name="ChangeAliasesOfBNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
  <ItemGroup>
    <ReferencePath Condition="'%(FileName)' == 'B'">
      <Aliases>nonmerged</Aliases>
    </ReferencePath>
  </ItemGroup>
</Target>

Я пытался использовать частные активы, но не смог получитьошибка компилятора, чтобы уйти таким образом.

0 голосов
/ 07 сентября 2018

Отключить транзитивную зависимость PackageReference для конкретного проекта MsBuild

Если я правильно вас понял, вы можете попробовать использовать свойство <PrivateAssets>all</PrivateAssets> или PrivateAssets="all" для PackageReference. Если у вас есть пакет, помеченный как частный ресурс, он просто предотвращает его передачу в родительский проект или упаковку.

enter image description here

<PackageReference Include="B" Version="1.0.0" PrivateAssets="all">
<PackageReference Include="C" Version="1.0.0" PrivateAssets="all">

Вы можете проверить документ Управление активами зависимостей и этой цепочки для некоторых деталей.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...