我可以阻止 nuget 包加载它的所有依赖项吗?

Can I prevent a nuget package from loading all of its dependencies?

我的 C# .Net Framework 4.7.2 项目正在使用 NuGet 包,将其称为包 A。包 A 具有对包 B 的包引用。包 B 导致我出现问题,我不想在我的项目中使用它.由于包 A 中提供的接口的默认实现,包 B 只是一个依赖项。我可以提供接口的新实现,但如何防止 NuGet 恢复引入不需要的和现在不需要的包 B?

I can provide a new implementation of the interface, but how can I prevent a NuGet restore from pulling in the unwanted and now unneeded Package B?

由于您在项目中安装了包 A 及其依赖包 B,您可以尝试这些:

首先,尝试进入你的packages.config文件并像这样删除包B:

删除这个:

<package id="Package B" version="xxx" targetFramework="net472" />

其次,删除xxx.csproj文件下的Package B(unload your project-->Edit xxx.csproj)并删除这个:

<Reference Include="Package B, Version=xxx Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
      <HintPath>..\packages\xxx\PackageB.dll</HintPath>
    </Reference>

然后 重新加载您的项目,它不会在还原步骤或生成时加载包 B。

此外,如果你想安装一个没有依赖的nuget包,你可以尝试运行这个Tools-->NuGet Package Manager-->Nuget Packager Console:

Install-Package <package name> -IgnoreDependencies

它不会安装 nuget 包的所有依赖项。

如果你的 nuget 包中有多个依赖项,而你只想删除其中一个,你只能像往常一样安装 nuget 包和所有依赖项,然后使用我的解决方案删除 nuget 包。