我们有一个由一堆小工具组成的项目.
所有这些都使用MongoDB,并且没有其中一个没有使用该错误一次又一次地烦扰我:
发生System.IO.FileNotFoundException HResult = 0x80070002
消息=无法加载文件或程序集'System.Runtime.InteropServices.RuntimeInformation,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.
并且他们都有一个app.config文件,我甚至不知道其来源与以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
</dependentAssembly>
</assemblyBinding>
Run Code Online (Sandbox Code Playgroud)
同时,NuGet有以下几行:
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net462" />
Run Code Online (Sandbox Code Playgroud)
所以,显然,我有Interop lib版本4.3.0,但有些文件我不知道想要版本4.0.1.0(请注意,甚至没有相同数字的数字).这通常是通过删除lib,重新添加它来修复的......很快,同样的问题将再次出现,通常是在一些NuGet更新之后,等等.
它似乎只发生在我们有MongoDB库的项目中,其中NuGet中的版本号与创建app.config文件的版本号不同步.
在具有面向 .NET Standard 2.0 的库版本的情况下,这些绑定重定向是必要的。.NET 4.6.2 最初并不支持 .NET Standard 2.0(它在 .NET Standard 2.0 之前发布),因此需要额外的 DLL 才能在 .NET 4.6.2 上启用 .NET Standard 2.0 支持,并绑定重定向这些 DLL 需要。
如果您能够以 .NET 4.7.2 为目标,那么您将不需要这些绑定重定向。另外,检查您的 Visual Studio 版本(否则将添加更多 DLL 以支持具有 .net 版本的旧 Visual Studio)。
如果您无法更新 .NET 版本,请尝试设置正确的bindingRedirect
,而不是从 web.config 中删除此部分。
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.3.0.0" />
Run Code Online (Sandbox Code Playgroud)
这意味着使用 4.0.1.0 编译的库将在运行时使用版本 4.3.0.0。