创建.NET Standard 2.0 NuGet包时如何排除指定依赖项
如何排除特定PackageReference作为NuGet依赖项
当然可以实现!针对那些仅提供.targets构建文件的NuGet包,你只需要在项目文件(.csproj)中给对应的PackageReference添加特定的MSBuild元数据,就能阻止它被包含到你的NuGet包依赖列表里。
具体做法
找到那个只含.targets的PackageReference节点,添加PrivateAssets="All"属性,示例如下:
<PackageReference Include="你的目标包名称" Version="对应的版本号"> <PrivateAssets>All</PrivateAssets> </PackageReference>
原理说明
PrivateAssets="All"会告诉MSBuild:这个包的所有资产(包括构建目标、依赖项等)仅用于当前项目的构建过程,不会被传递到引用你项目的其他项目,也不会被包含在你生成的NuGet包的依赖声明中。- 这样设置后,这个包依然会在你的项目构建时正常生效(比如它的
.targets文件会被执行),但最终用户安装你的NuGet包时,不会自动下载这个依赖包。
额外验证
设置完成后,你可以:
- 生成NuGet包后,解压
.nupkg文件,查看里面的.nuspec文件,确认目标包没有出现在<dependencies>节点中。 - 本地构建项目,确保构建流程不受影响,同时依赖列表中不再包含该包。
内容的提问来源于stack exchange,提问作者myermian




