禁用特定 MsBuild 项目的传递性 PackageReference 依赖项
Disable transitive PackageReference dependency for a specific MsBuild project
我正在将旧式 MsBuild csproj 项目迁移到使用 PackageReference 格式,并且 运行 遇到了传递依赖项的问题。
考虑以下问题
项目 A 引用 NuGet 包 B 和 C,每个都包含一个使用 PackageReference 的程序集。
在构建项目 A 中,使用 IL merge 将 B 作为 public 符号合并到 A 程序集中,并将 C 作为内部化符号。
项目 D 具有对 A 的项目引用。
传递依赖案例 D 引用 A、B 和 C。
构建D时,编译错误类型
错误 CS0433:类型 'X' 存在于 'A' 和 'B' 中
发生。
在上面的场景中,有没有办法强制D不添加对B或C的显式引用?
Disable transitive PackageReference dependency for a specific MsBuild project
如果我的理解正确,您可以尝试使用 属性 <PrivateAssets>all</PrivateAssets>
或 PrivateAssets="all"
作为 PackageReference
。如果您有一个标有私有资产的包,它只会阻止它流向父项目或被打包。
<PackageReference Include="B" Version="1.0.0" PrivateAssets="all">
<PackageReference Include="C" Version="1.0.0" PrivateAssets="all">
您可以查看文档 Controlling dependency assets and this thread 了解一些详细信息。
希望这对您有所帮助。
我最终使用 workaround 将传递依赖项移动到别名以绕过编译器错误。
<Target Name="ChangeAliasesOfBNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'B'">
<Aliases>nonmerged</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
我尝试使用私有资产,但无法以这种方式消除编译器错误。
我正在将旧式 MsBuild csproj 项目迁移到使用 PackageReference 格式,并且 运行 遇到了传递依赖项的问题。
考虑以下问题 项目 A 引用 NuGet 包 B 和 C,每个都包含一个使用 PackageReference 的程序集。 在构建项目 A 中,使用 IL merge 将 B 作为 public 符号合并到 A 程序集中,并将 C 作为内部化符号。 项目 D 具有对 A 的项目引用。
传递依赖案例 D 引用 A、B 和 C。 构建D时,编译错误类型 错误 CS0433:类型 'X' 存在于 'A' 和 'B' 中 发生。
在上面的场景中,有没有办法强制D不添加对B或C的显式引用?
Disable transitive PackageReference dependency for a specific MsBuild project
如果我的理解正确,您可以尝试使用 属性 <PrivateAssets>all</PrivateAssets>
或 PrivateAssets="all"
作为 PackageReference
。如果您有一个标有私有资产的包,它只会阻止它流向父项目或被打包。
<PackageReference Include="B" Version="1.0.0" PrivateAssets="all">
<PackageReference Include="C" Version="1.0.0" PrivateAssets="all">
您可以查看文档 Controlling dependency assets and this thread 了解一些详细信息。
希望这对您有所帮助。
我最终使用 workaround 将传递依赖项移动到别名以绕过编译器错误。
<Target Name="ChangeAliasesOfBNameAssemblies" BeforeTargets="FindReferenceAssembliesForReferences;ResolveReferences">
<ItemGroup>
<ReferencePath Condition="'%(FileName)' == 'B'">
<Aliases>nonmerged</Aliases>
</ReferencePath>
</ItemGroup>
</Target>
我尝试使用私有资产,但无法以这种方式消除编译器错误。