3 votes

Désactiver la dépendance transitive PackageReference pour un projet MsBuild spécifique

Je suis en train de migrer un projet MsBuild csproj à l'ancienne en utilisant le format PackageReference et j'ai rencontré un problème avec les dépendances transitives.

Examinez les points suivants Le projet A référence les paquets NuGet B et C, chacun contenant un seul assemblage, à l'aide de PackageReference. Lors de la construction, le projet A utilise la fusion IL pour incorporer B en tant que symboles publics dans l'assemblage A et C en tant que symboles internalisés. Le projet D a une référence de projet vers A.

Les dépendances transitives renvoient le cas D aux références A, B et C. Lors de la construction de D, des erreurs de compilation du type erreur CS0433 : Le type 'X' existe à la fois dans 'A' et 'B' se produisent.

Existe-t-il un moyen de forcer D à ne pas ajouter de référence explicite à B ou C dans le scénario ci-dessus ?

2voto

Viktor Griph Points 101

J'ai fini par utiliser un solution de rechange pour déplacer la dépendance transitive vers un alias afin de contourner l'erreur du compilateur.

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

J'ai essayé d'utiliser des actifs privés, mais je n'ai pas réussi à faire disparaître l'erreur du compilateur de cette manière.

1voto

Leo Liu-MSFT Points 21360

Désactiver la dépendance transitive PackageReference pour un projet MsBuild spécifique

Si je comprends bien, vous pouvez essayer d'utiliser la propriété <PrivateAssets>all</PrivateAssets> ou PrivateAssets="all" pour les PackageReference . Si un paquet est marqué par des actifs privés, cela l'empêche simplement de passer au projet parent ou d'être emballé.

enter image description here

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

Vous pouvez consulter le document Contrôle des actifs liés aux dépendances y ce fil pour plus de détails.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X