无法加载文件或程序集"Microsoft.Data.Edm"

use*_*711 37 .net c# dll azure

我们使用的是Windows Azure Storage NuGet软件包4.1.0版,它依赖于Microsoft.Data.OData,并且还添加了具有Microsoft.Data.Edm dll的软件包.当我们构建并运行应用程序时,我们偶尔会遇到以下错误:

Could not load file or assembly 'Microsoft.Data.Edm' or one of its dependencies. The
located assembly's manifest definition does not match the assembly reference. (Exception
from HRESULT: 0x80131040)
Run Code Online (Sandbox Code Playgroud)

我们在web.config中有以下绑定重定向,并且还检查过,这是解决方案中任何项目引用的唯一Microsoft.Data.Edm版本.

  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.6.1.0" newVersion="5.6.1.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

有时当我查看bin文件夹时,我发现Microsoft.Data.Edm的dll版本是v 5.6.0.我已经完成了所有项目,除了存储客户端之外我找不到对Microsoft.Data.Edm的引用,这绝对是5.6.1.

尝试找出5.6.0版本的最佳方法是什么?当我们得到这个错误时,我们删除了bin和obj文件夹并重建然后它工作正常,5.6.1版本就在那里,一切正常但最终又发生了.

编辑:

我们再次升级到NuGet的所有最新版本但仍然没有运气,我运行了一个显示以下依赖项的工具:

Possible conflicts for Microsoft.Data.Edm:

Microsoft.Data.OData      references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.Data.Services.Client references Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.Edm, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

Possible conflicts for Microsoft.Data.OData:

Microsoft.Data.Services.Client references Microsoft.Data.OData, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.WindowsAzure.Storage references Microsoft.Data.OData, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Run Code Online (Sandbox Code Playgroud)

我不明白的是我们有app绑定重定向设置,但有时2.6.0版本被复制,有时是2.6.2.有谁知道为什么会发生这种情况,从来没有遇到过这个问题.

Bil*_*ill 20

我有相同的错误消息,但我的问题与任何Azure产品无关.就我而言,我将OData从版本3更新为4,在我看来,Nuget为弃用的dll留下了绑定重定向.实际上总共有三个,Microsoft.Data.Edm,Microsoft.Data.OData和System.Spatial.

我的解决方案是删除已弃用的绑定重定向.如果构建过程没有,您还应该删除bin文件夹中的旧dll.


dev*_*ost 5

对于我的团队成员来说,有时似乎可以解决此问题的一件事是关闭 Visual Studio 的所有实例,删除包目录的内容,重新打开 Visual Studio,然后还原包并重建。但这并不总是有效。

我们能够通过增加 Visual Studio 构建输出详细程度来识别有问题的项目,从而在我们的一台机器上跟踪问题:

增加 Visual Studio 构建输出的详细程度

然后,我们搜索输出并通过搜索“Microsoft.Data.Edm”确定有问题的目标项目。我们注意到它似乎间接依赖于 Microsoft.Data.Edm,但我们注意到该程序集并未明确包含为该项目的包。因此,使用 Nuget 包控制台,我们定位了项目并运行: Install-Package Microsoft.Data.Edm 这解决了问题。

使用 Nuget 安装包


sta*_*247 3

您可以尝试以下几件事:

  1. 检查生成后事件以确保没有 Microsoft.Data.Edm.dll 文件被手动复制到 bin 文件夹。
  2. 确保其他包不依赖于 Microsoft.Data.Edm 5.6.1。执行此操作的简单方法是查看 package.config 文件。
  3. 如果您的代码位于源代码管理中,请确保没有人检查 bin 文件夹。我很惊讶有这么多人不知道这条基本规则。
  4. 卸载 WindowsAzure.Storage 和 Microsoft.Data.Edm 包。然后再次安装并确保只安装稳定版本。

HTH。