我知道这被问了很多,但我尝试了所有解决方案并且没有工作!
在调试模式下运行时出现错误:
System.IO.FileLoadException:'无法加载文件或程序集 ' System.Runtime.InteropServices.RuntimeInformation,Version = 4.0.0.0, Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个 依赖。定位程序集的清单定义没有 匹配程序集引用。 (HRESULT的例外情况:0x80131040)'
我尝试删除bin
中所有obj
的所有projects
和solution
个文件夹。还删除了Packages
文件夹。
还在所有配置文件中删除了此条目:
<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>
还将上述代码中的newVersion
值更改为4.0.0.0
,但绝不喜欢这样做!
当我卸载项目并编辑它时,我看到了这一行:
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
</Reference>
我该如何解决这个问题?提前谢谢。
答案 0 :(得分:2)
可能有点晚了,但是我在使用.net 4.6.2的一台旧版构建服务器上遇到了MongoDB驱动程序(从2.5升级到2.7)的类似问题。奇怪的是,使用Visual Studio构建时,它可以在本地计算机上工作。 问题在于NuGet本身,以及在软件包更新期间添加的错误程序集绑定。 我们必须手动检查正确的程序集版本并覆盖app.config中的值。
确保通过在目标计算机上添加以下注册表项来激活详细的日志记录: HKLM \ Software \ Microsoft \ Fusion> EnableLog(DWORD)设置为1
然后,您可以获得有关DLL引起问题的详细信息。
以下PowerShell命令可以帮助找到正确的程序集版本。例如InteropServices:
[System.Reflection.Assembly]::LoadFrom("C:\path_to_your_release_folder\System.Runtime.InteropServices.RuntimeInformation.dll").GetName().Version
在我们的例子中是:
Major Minor Build Revision
----- ----- ----- --------
4 0 1 0
在app.config中,NuGet编写了4.0.2.0,因此我们将其更改为4.0.1.0:
<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>
然后一切都按预期自动恢复正常。
因此,确保使用哪种绑定的唯一方法是使用上述方法自己检查版本。