禁用特定MsBuild项目的传递PackageReference依赖项

问题描述 投票:3回答:2

我正在将旧样式MsBuild csproj项目迁移到使用PackageReference格式,并且遇到了传递依赖项的问题。

考虑以下项目A引用NuGet包B和C,每个包含一个使用PackageReference的单个程序集。在构建项目A上使用IL合并将B作为公共符号合并到A程序集中,将C作为内部化符号合并。项目D有一个项目参考A.

传递依赖关系案例D引用A,B和C.当构建D时,编译类型错误CS0433的错误:“A”和“B”都存在类型“X”。

有没有办法强制D在上面的场景中不添加对B或C的显式引用?

msbuild visual-studio-2017 nuget transitive-dependency packagereference
2个回答
2
投票

我最终使用workaround将传递依赖项移动到别名以绕过编译器错误。

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

我试图使用私有资产,但无法以这种方式消除编译器错误。


0
投票

禁用特定MsBuild项目的传递PackageReference依赖项

如果我理解你是正确的,你可以尝试使用属性<PrivateAssets>all</PrivateAssets>or 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">

您可以查看文档Controlling dependency assetsthis thread了解一些细节。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.