无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配

Posted

技术标签:

【中文标题】无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配【英文标题】:Could not load file or assembly. The located assembly's manifest definition does not match the assembly reference 【发布时间】:2019-12-04 03:49:24 【问题描述】:

我正在尝试在蓝色棱镜中添加一项 google vision API 功能,但出现错误

“内部:无法执行代码阶段,因为代码阶段引发了异常:无法加载文件或程序集“Google.Apis.Auth,版本=1.35.1.0,文化=中性,PublicKeyToken=4b01fa6e34db77ab”或其中之一它的依赖关系。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)"

但提到的 dll 在 Blue prism 文件夹中可用,我已在初始化页面中添加了引用。 Google.Apis.Auth的当前版本是1.40.2,但是我试了1.35.1.0的版本,还是没用。我尝试添加其他线程中提到的引用“Google.Cloud.PubSub.V1”,但这也不能解决问题。

下面提到的带有 dll 引用的代码在 Visual Studio 中运行良好,但在 blueprism 中却不行。

请有人帮我解决这个问题

  var image = Image.FromFile("C:/New folder/Google VisionAI/otter_crossing.jpg");
  var client = ImageAnnotatorClient.Create();
  var response = client.DetectText(image);      

  foreach (var annotation in response)
  
       if (annotation.Description != null)
       
           Output = annotation.Description;
       
          

【问题讨论】:

【参考方案1】:

这可能是依赖版本冲突,这意味着您的应用可能依赖于多个版本的程序集。您可以尝试将程序集绑定添加到您的 app.config 文件或 web.config 文件(取决于您的项目类型),如下所示:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Google.Apis.Auth" publicKeyToken="4b01fa6e34db77ab" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.40.2.0" newVersion="1.40.2.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

基本上它在运行时说,任何依赖于版本 0.0.0.0-1.40.2.0 的“Google.Apis.Auth”的东西,都使用版本 1.40.2.0 的程序集。然后你就可以参考最新版本了。

【讨论】:

代码在 Visual Studio 中运行。知道如何在 blueprism 中做到这一点吗?【参考方案2】:

正如错误所说,它找不到您想要的参考的特定版本;因此,程序集之间可能存在不匹配。 您可以做几件事来解决问题: 1- 确保它可以通过将其放入 GAC 或您的应用程序路径中找到正确的参考版本。 2- 您也可以在 packages.config 或 web.config 中检查您的版本。 3- 在您的硬盘驱动器中搜索程序集,在结果页面中选择每个文件,查看属性中的详细信息选项卡并检查版本,以便您可以找到不需要的版本的来源。 4- 删除 bin 文件夹并重建。 检查this link。

【讨论】:

代码在 Visual Studio 中运行。知道如何在 blueprism 中做到这一点吗?【参考方案3】:

检查您的 Web 应用程序的 Web.config。我看到我的一个重复条目。一个拥有全部大写的公共令牌。所以我猜它是区分大小写的,并且在我升级版本时没有覆盖。所以它一直使用旧版本号,我显然已经卸载了它。 这可能是一种罕见的情况,但它可以帮助其他人。 希望这会有所帮助。

这是存在的副本(下)。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Google.Apis.Auth" publicKeyToken="4B01FA6E34DB77AB" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.27.1.0" newVersion="1.27.1.0" />
  </dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Google.Apis.Auth" publicKeyToken="4b01fa6e34db77ab" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-1.47.0.0" newVersion="1.47.0.0" />
  </dependentAssembly> </assemblyBinding>

【讨论】:

以上是关于无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配的主要内容,如果未能解决你的问题,请参考以下文章

找到的程序集的清单定义与程序集不匹配

ASP.NET 与用于 .NET 的 Delphi 2007。无法加载文件或程序集...定位的程序集的清单定义与程序集引用不匹配

“找到的程序集的清单定义与程序集引用不匹配”

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

HRESULT:0x80131040:找到的程序集的清单定义与程序集引用不匹配

MVC4.0:未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0 ”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配