我们说我的解决方案有两个包依赖关系:
3rdParty.CompanyA.ProductA版本4.0.1 和3rdParty.CompanyB.ProductB版本2.0.1
两个包都引用其他包依赖" C" 。 第一个的依赖性设置为"高于1.2 - (> 1.2)" ,另一个设置为"高于1.8 - (> 1.8)"。
当我在本地编译解决方案时,一切正常并且" C" bin目录中的版本是最新的" 1.8"正如所料...... 但是当我在 TFS 中编译此解决方案并引用相同的 .Nuget \ NuGet.config 文件时,我获得了旧的1.2v" bin目录中的C" 版本,因此我的产品坏了。 是否有特殊配置通知TFS还原以获取将匹配所有依赖项的版本?
我想我知道我的问题来自哪里,但我对网络非常了解。 在TFS中,我为8个项目编译和恢复包。 编译完成后,我使用"测试程序集"运行 UnitTest。步骤 我发现使用默认设置我的unittest因为它引用旧DLL而被破坏。但当我打开"并行运行"它按预期工作。
答案 0 :(得分:0)
不确定是否完全明白你的观点。在我看来,这两个包应该在一些项目中。如果没有,将有两个bin文件夹,一个用于1.2,一个用于1.8。
它是Nuget Restore中的堂兄依赖概念:
当在相同距离处引用不同的包版本时 在应用程序的图表中,NuGet 使用最低版本 满足所有版本要求(与最低版本相同) 适用的版本和浮动版本规则)。在下图中, 例如,Package B的2.0版将满足另一个> = 1.0 约束,因此将被使用:
它还使用NuGet.exe int TFS NuGet还原任务。不应该有任何其他设置或参数。建议您在TFS中启用调试模型,并查看更多详细日志以进行故障排除。否则,只需使用简单的解决方法更改第一个的依赖关系也设置为"高于1.8 - (> 1.8)"
更新
建议你打开"并行运行"在VS测试任务中,测试将并行运行,利用机器的可用内核。有关测试如何并行运行,请参考Parallel Test Execution在这种情况下的一个好选择。