无法加载文件或程序集或其依赖项之一。

时间:2017-12-30 11:46:52

标签: c# visual-studio nuget

我知道这被问了很多,但我尝试了所有解决方案并且没有工作!

在调试模式下运行时出现错误:

  

System.IO.FileLoadException:'无法加载文件或程序集   ' System.Runtime.InteropServices.RuntimeInformation,Version = 4.0.0.0,   Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其中一个   依赖。定位程序集的清单定义没有   匹配程序集引用。 (HRESULT的例外情况:0x80131040)'

我尝试删除bin中所有obj的所有projectssolution个文件夹。还删除了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>

我该如何解决这个问题?提前谢谢。

1 个答案:

答案 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>

然后一切都按预期自动恢复正常。

因此,确保使用哪种绑定的唯一方法是使用上述方法自己检查版本。