需要让带有传递引用的 Nuget 包被本地引用覆盖以进行单元测试

Need to have Nuget package with transitive reference overridden by local reference for unit test

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

我的测试项目 A 具有对包 B 的直接 nuget 引用 包括对 nuget 包 C 的传递引用。

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

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

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

我想为我的测试申请本地参考。

继续:

我的项目是.net Framework 4.6.1

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

而且您似乎对项目 C 使用了 nuget 包ProjectReference在项目 A.

xxx.csproj 文件中

像这样:

 <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节点。只保留后者。

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

答案 更新自 k4st0r42

删除项目A中的所有nuget引用和项目引用,然后仅添加对本地项目C.[=21的引用=]