nuget update为system.runtime设置bindingRedirects,然后在运行时失败

时间:2017-06-13 02:46:29

标签: nuget visual-studio-2017

我有一个中等复杂的应用程序,有一个针对.NET Framework 4.6.1的单元测试项目

如果我在Package Management控制台中运行以下命令:

update-package -reinstall -project velogicfit.Sizer3D.Core.UnitTests

...然后Nuget将一堆绑定重定向添加到单元测试项目的app.config文件中,重定向到System.Runtime之类的v4.1.1.0:

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>

然后,当项目运行时(由NCrunch运行),它失败并显示消息:

System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

我可以通过安装更新​​的框架版本来修复错误,但我宁愿了解导致Nuget添加这些绑定重定向的原因。

查看单元测试项目输出目录中的每个DLL,我可以看到的最高参考是system.runtime v4.0.20.0

我已经尝试了asmspy并且它还报告了4.0.20.0有一些依赖,但4.1.1.0没有任何内容

FWIW,对system.runtime v4.0.20.0的引用都来自我在解决方案中的其他项目,目标是NETStandard 1.4

问题:

  • 如何找出哪个框架版本对应于每个版本的system.runtime(4.0.0.0,4.0.20.0,4.1.1.0)?
  • 是否有任何记录我可以打开以找出Nuget的想法&amp;为什么它将程序集绑定重定向设置为4.1.1.0?
  • 我的NETStandard 1.4项目应该引用4.0.20.0吗?

1 个答案:

答案 0 :(得分:1)

我最终通过切换到Paket来解决这个问题(和其他一些参考问题)。 Paket帮助我掌握了我的直接和传递依赖关系,然后我能够看到什么取决于什么并适当地设置绑定重定向。