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

C# 无法加载文件或程序集或其依赖项之一。,c#,visual-studio,nuget,C#,Visual Studio,Nuget,我知道这是问了很多,但我尝试了每一个解决方案,没有工作 这是在调试模式下运行时出现的错误: System.IO.FileLoadException:'无法加载文件或程序集 'System.Runtime.InteropServices.RuntimeInformation,版本=4.0.0.0, 区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'或其 依赖关系。定位程序集的清单定义不正确 匹配程序集引用。(HRESULT的例外:0x8013100)' 我尝试删除我的解

我知道这是问了很多,但我尝试了每一个解决方案,没有工作

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

System.IO.FileLoadException:'无法加载文件或程序集 'System.Runtime.InteropServices.RuntimeInformation,版本=4.0.0.0, 区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'或其 依赖关系。定位程序集的清单定义不正确 匹配程序集引用。(HRESULT的例外:0x8013100)'

我尝试删除我的
解决方案中所有
项目的
bin
obj
文件夹。还删除了
软件包
文件夹

还删除了所有配置文件中的此项:

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

我怎样才能解决这个问题?提前感谢。

可能有点晚了,但我在使用.net 4.6.2的一个旧版构建服务器上遇到了类似的MongoDB驱动程序问题(从2.5升级到2.7)。奇怪的是,当使用VisualStudio构建时,它在本地机器上工作。 问题在于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
In-out 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>

正如预期的那样,所有这些都自动恢复了工作


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

可能有点晚了,但我在使用.net 4.6.2的一个旧版构建服务器上遇到了类似的MongoDB驱动程序问题(从2.5升级到2.7)。奇怪的是,当使用VisualStudio构建时,它在本地机器上工作。 问题在于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
In-out 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>

正如预期的那样,所有这些都自动恢复了工作


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

请阅读。也许有一个答案。@JohnyL好的,我将其更改如下:
oldVersion=“0.0.0-4.0.1.0”newVersion=“4.3.0.0”
,相同的错误。您使用的是什么运行时-project target?您是否从Visual Studio运行-哪个版本?直接从windows资源管理器运行exe时,是否会得到相同的结果?尝试fusion log查看加载的内容:这里几乎没有不匹配的内容。在您的配置文件中,它建议它引用版本4.0.1.0——当您卸载项目时,它暗示版本位于版本4.3.0的文件夹中。但是,缺少的版本实际上是版本4.0.0.0。-->如果您正在使用某些软件包管理器,请尝试加载版本4.0.0.0而不是较新的版本?@hsoesanto安装的版本
4.0.0.0
使用NuGet软件包管理器,没有帮助。请阅读。也许有一个答案。@JohnyL好的,我将其更改如下:
oldVersion=“0.0.0-4.0.1.0”newVersion=“4.3.0.0”
,相同的错误。您使用的是什么运行时-project target?您是否从Visual Studio运行-哪个版本?直接从windows资源管理器运行exe时,是否会得到相同的结果?尝试fusion log查看加载的内容:这里几乎没有不匹配的内容。在您的配置文件中,它建议它引用版本4.0.1.0——当您卸载项目时,它暗示版本位于版本4.3.0的文件夹中。但是,缺少的版本实际上是版本4.0.0.0。-->如果您使用的是某些软件包管理器,请尝试加载版本4.0.0.0而不是较新的版本?@hsoesanto安装的版本
4.0.0.0
使用NuGet软件包管理器,没有帮助。谢谢,这对我很有用。其他类似的帖子建议您包括系统运行时的绑定重定向。但删除此项,但保留InteropServices的重定向,使事情再次正常运行。非常感谢!!!这条powershell线是金色的!有趣的是,它在不同的机器上使用相同的代码生成DLL,返回不同的版本。在我的本地机器上,我得到了4.0.0,而CI生成的构建显示了4.0.2。我不得不根据情况调整。谢谢,这对我很有效。其他类似的帖子建议您包括系统运行时的绑定重定向。但删除此项,但保留InteropServices的重定向,使事情再次正常运行。非常感谢!!!这条powershell线是金色的!有趣的是,它在不同的机器上使用相同的代码生成DLL,返回不同的版本。在我的本地机器上,我得到了4.0.0,而CI生成的构建显示了4.0.2。我们必须相应地进行调整