尽管标记为 PrivateAssets,但 nuget 包中的项目依赖项仍被复制到应用程序 bin 文件夹

Project dependencies in a nuget package are being copied to the application bin folder despite being marked PrivateAssets

我有一个名为 MyHelper 的 .netcore2.0 应用程序。 MyHelper 正在引用名为 B 的 .netstandard2.0 项目。 MyHelper 作为 nuget 包发布。

我只需要在构建时在其他项目和解决方案中使用 MyHelper,因此在我的其他项目中我将此 nuget 包标记为私有:

<PackageReference Include="MyHelper" Version="1.0.0">
      <PrivateAssets>all</PrivateAssets>
</PackageReference>

但是在我使用此 nuget 包的其他项目的输出文件夹中,存在 B.dll。 我不想要那样,因为它只用于构建时间。 如何阻止它被运送到应用程序。 谢谢

<PrivateAssets>all</PrivateAssets> 不适用于您的情况。当您在 Project C 中使用此节点时,它将阻止另一个名为 Project D 的项目,该项目引用了 Project C 没有访问 nuget 包。

换句话说,当您将此节点用于项目C的nuget包时,以及其他有参考的项目Project C,其他项目无法访问nuget包,它只是当前Project C的私有属性。

所以无法解决你的需求,无法处理nuget包的依赖

解决方案 1

只需使用 Delete 任务,将其添加到引用 MyHelper nuget 包的项目中:

<Target Name="RemoveTheFiles" AfterTargets="AfterBuild">
        
        <ItemGroup>
            <File Include="$(TargetDir)B.dll">          
            </File>
        </ItemGroup>

        <Delete Files="@(File)"></Delete>
                    
</Target>