删除 NuGet 包的依赖 NuGet 包

Posted

技术标签:

【中文标题】删除 NuGet 包的依赖 NuGet 包【英文标题】:Removing a NuGet package's dependent NuGet packages 【发布时间】:2021-02-23 10:01:27 【问题描述】:

背景:

我正在为我的公司创建项目的 NuGet 包,然后这些 NuGet 包将安装到其他内部项目中。目前,我正在使用 .NET Standard/Core 项目的内置功能来做这件事。这可以按预期工作,但是,我们所有的项目都安装了“包装 NuGet 包”以进行一些代码分析(StyleCop NuGet 包 + 公司特定的规则集文件和 Json 文件)。

如果我想将一个 NuGet 包(我创建的)安装到另一个项目中,它总是会添加对我们的样式分析器 NuGet 包的依赖。

这是安装在项目中的样子:

问题:

有没有一种方法可以在创建 NuGet 包时删除对特定 NuGet 包的依赖?即有没有办法可以在(.csproj 文件)的行中做某事:

<ItemGroup>
    <PackageReference Condition="'$(Configuration)'=='Debug'" Include="CompanyStyleAnalyzer" Version="1.1.6" />
</ItemGroup>

但不是指定实际版本,我总是想删除依赖项,无论我在“发布”配置中构建项目时的版本是什么,或者更好的是,每次运行 Dotnet 包时,指定的东西最终包中不包含依赖项。

这是在项目中删除依赖项的“皱眉”方式吗?

我之前生成 NuGet 包的方式(在 .Net Framework 中)是使用 NuGet CLI -pack 命令,然后提取文件并编辑 .Nuspec 文件以手动删除依赖项。我不想编辑 Nuspec 文件并重新打包。

谁能说明我在这方面能做什么?

【问题讨论】:

您的问题有点不清楚,但我认为您可能正在寻找PrivateAssets=all? docs.microsoft.com/en-us/nuget/consume-packages/… 你说得对,这正是我想要的。我不喜欢我提到的“'$(Configuration)'=='Debug'”方法,PrivateAssets 方法似乎更适合用途。您也可以将其发布为答案,因为文档说明了所有需要的内容。谢谢。 仅供参考:由于@IanKemp 没有添加此作为答案,我已代表他们这样做(并将其标记为社区 wiki,因为这不是我的贡献)。这将允许该答案被接受,因此该问题不会显示为未回答。 【参考方案1】:

根据@Ian-Kemp 的评论,这可以通过在您的PackageReference 下使用the PrivateAssets element 来实现:

<ItemGroup>
  <PackageReference Include="CompanyStyleAnalyzer" Version="1.1.6" />
    <PrivateAssets>all</PrivateAssets>
  </PackageReference>
</ItemGroup>

【讨论】:

以上是关于删除 NuGet 包的依赖 NuGet 包的主要内容,如果未能解决你的问题,请参考以下文章

带有私有 NuGet 包的 Blazor 依赖项注入和 EF/DbContext

如何从服务器中删除 NuGet 包?

您如何覆盖传递的 nuget 依赖项

Roslyn 打包 NuGet 包 BuildTransitive 文件夹用于穿透依赖传递拷贝文件

有没有一种聪明的方法来处理 NuGet 中的包依赖关系?

Visual Studio NuGet离线安装