【问题标题】:Need to have Nuget package with transitive reference overridden by local reference for unit test需要将具有传递引用的 Nuget 包被本地引用覆盖以进行单元测试
【发布时间】:2026-01-29 11:25:01
【问题描述】:

在我的解决方案中,我有一个单元测试项目 A。

我的测试项目 A 有一个对包 B 的直接 nuget 引用,其中包含对 nuget 包 C 的传递引用。

我的测试项目 A 还具有对本地项目 C' 的本地引用。

所以,在我的项目 A 中,我既有对 C' 的本地引用,又有对 C 的 nuget 引用。

这是应用的 nuget,而不是本地引用...

我想为我的测试应用本地参考。

继续:

  • A(单元测试)> B(直接 nuget)> C(传递 nuget)
  • A(单元测试)> C'(本地参考)

我的项目在 .net framework 4.6.1 中

【问题讨论】:

  • 您好 k4st0r42,关于这个问题的任何更新?请检查我的回答是否有帮助。如果有帮助,请不要忘记accept it。如果没有,请随时告诉我们:
  • 对不起,最后我通过删除所有引用解决了这个问题,重新启动 VS 并添加对我本地项目的引用...
  • 感谢您的反馈。由于您的解决方法与我的类似。当你使用hintpath下的lcoal dll时,说明你已经直接引用了本地项目。无论如何,感谢您与我们分享解决方案。 I have added your solution into the answer and you can mark it so that it will help other community members search and handle similar issues:)提前致谢!

标签: c# .net visual-studio nuget nuget-package


【解决方案1】:

我认为您在 Project A 中使用了packages.config nuget management format

而且您似乎在项目 A 的 xxx.csproj 文件中使用了 nuget 包ProjectReference 项目 C

像这样:

 <Reference Include="ProjectB, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>xxx\ProjectB.dll</HintPath>
 </Reference>
 <Reference Include="ProjectC, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>xxx\ProjectC.dll</HintPath>
 </Reference>

 <ProjectReference Include="C:\xxx\ProjectC.csproj">
        <Name>ProjectC</Name>
 </ProjectReference>

事实上transisive nuget 的优先级高于ProjectReference。而且当你通过这两种方式引用同一个dll时,VS会一直使用transisive nuget

要解决它,请检查以下两个建议:

建议

1)只需将nuget包ProjectChintpath改成本地项目的dll即可。

<Reference Include="ProjectC, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>xxx\local path\ProjectC.dll(use the dll of the local project C)</HintPath>
</Reference>

2) 或者你应该删除或注释掉像suggestion 1这样的nuget Reference节点,然后保留ProjectC的Project Reference节点。只保留后者。

==========================================

Answer 更新自 k4st0r42

Project A 中删除所有 nuget 引用和项目引用,然后只添加对本地 Project C 的引用。

【讨论】:

  • 可以使用.csproj文件中的条件,在引用项目和nuget之间切换。如果使用共享库,我们通常会为此生成特殊的解决方案,并让构建服务器基于 NuGet 发布代码和项目参考代码运行测试