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

dbr*_*ing 6 nuget visual-studio-2017

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

如果我在包管理控制台中运行以下内容:

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>
Run Code Online (Sandbox Code Playgroud)

然后,当项目运行时(通过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.
Run Code Online (Sandbox Code Playgroud)

我可以通过安装更新​​的框架版本来修复错误,但我宁愿了解是什么导致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正在思考什么以及为什么它将程序集绑定重定向设置为4.1.1.0?
  • 我的NETStandard 1.4项目应该引用4.0.20.0吗?

dbr*_*ing 1

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