如何替换第三方nuget包的依赖项?

如何替换第三方nuget包的依赖项?,nuget,branch,dependency-management,Nuget,Branch,Dependency Management,这个问题目前是假设性的,但有一个真实的基础 供应商X提供的NuGet软件包A取决于供应商Y提供的NuGet软件包B和Microsoft提供的System.Runtime 我们发现有必要将B分支(它是开源的)到B'来修复B中Y不愿意修复的bug。让我们假设我们在B上落后了几个版本(这最终肯定是真的) 项目Q取决于A和B’ 我怎样才能使努杰不至于完全困惑。我有一个用于构建nuget缓存目录的脚本,但是如果我们可以运行nuget restore并得到正确的答案,这将更有意义 理论上,我们可以说我们可以

这个问题目前是假设性的,但有一个真实的基础

供应商X提供的NuGet软件包A取决于供应商Y提供的NuGet软件包B和Microsoft提供的System.Runtime

我们发现有必要将B分支(它是开源的)到B'来修复B中Y不愿意修复的bug。让我们假设我们在B上落后了几个版本(这最终肯定是真的)

项目Q取决于A和B’

我怎样才能使努杰不至于完全困惑。我有一个用于构建nuget缓存目录的脚本,但是如果我们可以运行nuget restore并得到正确的答案,这将更有意义



理论上,我们可以说我们可以把B'发布到nuget.org上,但是B挡了路,所以上传不会花费太多时间。没有可能说服X使用我们的B'而不是Y的B,并且X是封闭源代码,因此我们无法重新编译它。

如果更改包id,则无法覆盖包依赖项,如果可以,则可以创建自定义版本。NuGet支持SemVer预发布版本,因此您可以将具有相同id的包推送到版本为
2.1.9-内部固定的
(甚至添加
[]
括号以指示固定版本依赖关系)的私有提要。如果使所有顶级项目都依赖于此版本,则它们将覆盖其他依赖项。请注意,如果程序包依赖于
2.1.9

,这可能会导致降级警告。如果更改程序包id,则无法覆盖程序包依赖项,如果可以,则可以创建自定义版本。NuGet支持SemVer预发布版本,因此您可以将具有相同id的包推送到版本为
2.1.9-内部固定的
(甚至添加
[]
括号以指示固定版本依赖关系)的私有提要。如果使所有顶级项目都依赖于此版本,则它们将覆盖其他依赖项。请注意,如果软件包依赖于
2.1.9

,这可能会导致降级警告。您是否也更改了软件包id?如果没有,您可以在消费项目中指定确切的版本(例如,
2.1.9-internal-fixed
),并使用降级警告(这需要在内部提要或目录包源中提供)@MartinUllrich:我可以这样做。如果你把整件事都写出来,我可以接受这样的回答。现在它缺少了部分,但我可以想象需要做什么。您可以编写一个自定义的
目标
来调整计算的
参考路径
项,删除错误的项并添加您的项。我有一个与您类似的问题,请参阅我的解决方案:您是否也更改了包id?如果没有,您可以在消费项目中指定确切的版本(例如,
2.1.9-internal-fixed
),并使用降级警告(这需要在内部提要或目录包源中提供)@MartinUllrich:我可以这样做。如果你把整件事都写出来,我可以接受这样的回答。现在它缺少了部分,但我可以想象需要做什么。您可以编写一个自定义的
目标
来调整计算的
参考路径
项,删除错误的项并添加您的项。我有一个与您类似的问题,请参阅我的解决方案:nuget解决了2.1.9—在compiletime内部修复,但dotnet build打包了2.1.9。您是否使用nuget来使用该版本?检查csproj文件中的HintPath元素,查看构建实际使用的文件。如果删除
packages
directory.NET核心:没有packages目录,则可以检查NuGet是否恢复了正确的版本。没有HintPath。DLL直接从nuget缓存复制到构建输出目录。您是否执行了
dotnet nuget locals all--clear
?确保没有旧软件包和替换版本?然后,您可以签入
obj\project.assets.json
哪个包是在nuget resolved 2.1.9中实际提取的,在compiletime内部修复,但dotnet build打包为2.1.9。您是否使用nuget来使用该版本?检查csproj文件中的HintPath元素,查看构建实际使用的文件。如果删除
packages
directory.NET核心:没有packages目录,则可以检查NuGet是否恢复了正确的版本。没有HintPath。DLL直接从nuget缓存复制到构建输出目录。您是否执行了
dotnet nuget locals all--clear
?确保没有旧软件包和替换版本?然后,您可以签入
obj\project.assets.json
实际拉入的包