无法加载文件或程序集“System.Buffers, Version=4.0.2.0...”

22

在使用 VS 配置管理器添加新配置后,调用 MongoClient 类的 GetDatabase 方法时,我遇到了以下异常:

Could not load file or assembly 'System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我安装了最新的System.Buffer nuget包v4.5.1,在我的app.config中创建了dependentAssembly并在我的.csproj文件中引用,但问题仍然存在。由于某种原因,它尝试使用v4.0.2引用System.Buffer。是否有人遇到类似的错误,你是如何解决的?


你进行了清理构建吗?当更改Net版本时,obj文件的依赖关系不使用Net版本。因此,您必须进行清理构建或删除项目的bin文件夹。还要检查bin文件夹中最新的dll文件是否在正确的文件夹中(debug/release)。 - jdweng
请尝试在CMD(以管理员身份运行)中输入System.Buffer nuget package v4.5.1。运行命令:run cd xxxx(xxxx\packages\System.Buffers.4.5.0\lib\netstandard2.0),然后输入:gacutil /i System.Buffers.dll。您可以参考此类似问题。完成后,请在包管理器控制台下运行update-package -reinstall重新安装该软件包。此外,您可以尝试将csproj文件中的Version=4.0.2.0更改为Version=4.0.3.0 - Mr Qian
请告诉我们是否有帮助。 - Mr Qian
jdweng:好的。仍然看到相同的问题。 - Adam Jensen
https://stackoverflow.com/users/12450747/perry-qian-msft 非常感谢!这对我很有用。 - Adam Jensen
@AdamJensen 很高兴知道我的步骤帮助您解决了问题。我已经为您添加了一个答案,您可以标记它。无论如何,祝您有美好的一天! - Mr Qian
8个回答

7

无法加载文件或程序集“System.Buffers,Version=4.0.2.0…”

解决方法:

1)使用CMD(以管理员身份运行)并键入以下命令:

 cd xxxx(xxxx\packages\System.Buffers.4.5.1\lib\netstandard2.0))

运行

gacutil /i System.Buffers.dll

然后,当您完成它之后,请在包管理器控制台下运行update-package -reinstall以重新安装该包。

2) 您可以尝试在 csproj 文件中将Version=4.0.2.0更改为Version=4.0.3.0

此外,您可以参考类似问题的解决方案


6

在我的情况下,我需要在已经发布到 Azure 应用服务的 web.config 文件中添加程序集引用,在 <configuration></configuration> 标记内部:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

4

当我试图创建一个blob上传客户端的Class Library时,我添加了Azure.Storage.Blobs包后遇到了这个问题。当我添加这个包时,它会创建一个正确的绑定重定向的app.config文件:

      <dependentAssembly>
        <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
      </dependentAssembly>
      <dependentAssembly>

然而,问题在于这个绑定重定向需要存在于应用程序的app.config中,而不是类库中:一个类库可以有一个App.config文件吗? 因此,添加绑定重定向是解决此问题的正确方法。只需确保绑定重定向在调用的web/console/etc应用程序中指定即可。

3
最简单的方式是使用Nuget包管理器,将system.buffers降级到任何较低版本,然后再升级到最新版本。

1
在我的情况下,答案是依赖项在 DLL 中,但是引用 DLL 的 EXE 也需要在 app.config 的 runtime 部分包含程序集绑定:
  <dependentAssembly>
    <assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
  </dependentAssembly>

重新构建应用程序后,问题得到了解决。VS2017 C# Winforms 应用程序 .NET Framework 4.6.1。

0

我遇到了类似的问题,尝试了上面的所有步骤。最后发现,另一个项目中有同一库的旧版本。由于解决方案中有太多的项目,所以其他引用被滚动视图滚动出了视野。


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何撰写好答案的更多信息。 - Community
这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - user107511

0
另一个解决方案:只需在生成异常的项目的Web.config文件中删除对程序集的引用。
这些引用可能看起来像:
<dependentAssembly>
  <assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
</dependentAssembly>

0
只需安装NuGet Package 4.4.0并将依赖程序集(System.Buffers)部署到Gac即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接