需要让带有传递引用的 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 而不是本地引用...
我想为我的测试申请本地参考。
继续:
- A(单元测试)> B(直接 nuget)> C(传递 nuget)
- A(单元测试)> C'(本地引用)
我的项目是.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包ProjectC
的hintpath
改成本地工程的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的引用=]
在我的解决方案中,我有一个单元测试项目 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
我认为您在 项目 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包ProjectC
的hintpath
改成本地工程的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的引用=]