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

问题描述 投票:37回答:10

我们使用的是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)

我们在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>

有时当我查看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

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

c# .net azure dll
10个回答
20
投票

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

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


0
投票

1)将Build Verbosity转为详细2)搜索Microsoft.Data.Edm并比较项目中使用的其他程序集的版本3)更新到其他程序集中使用的版本

解决了我的问题


4
投票

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

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

Increasing Visual Studio build output verbosity

然后,我们搜索输出并通过搜索“Microsoft.Data.Edm”识别出有问题的目标项目。我们注意到它似乎与Microsoft.Data.Edm有间接依赖关系,但是我们注意到程序集没有明确地包含在该项目的包中。因此,使用Nuget包控制台,我们针对该项目并运行:Install-Package Microsoft.Data.Edm解决了该问题。

Install Package with Nuget


3
投票

您可以尝试以下几种方法:

  1. 检查Post Build事件以确保没有将Microsoft.Data.Edm.dll文件手动复制到bin文件夹。
  2. 确保其他包不依赖于Microsoft.Data.Edm 5.6.1。这样做的简单方法是查看package.config文件。
  3. 如果您的代码在源代码管理中,请确保没有人签入bin文件夹。我很惊讶有多少人不知道这个基本规则。
  4. 卸载WindowsAzure.Storage和Microsoft.Data.Edm软件包。然后再次安装并确保只安装稳定版本。

HTH。


2
投票

我今天遇到了类似的情况,在我的情况下,构建总是将旧版本的dll复制到调试文件夹,原因是我的项目没有直接引用这个dll,它引用了另一个引用这个dll的项目。 所以在构建时,我的项目会从GAC或其他地方找到旧版本。 我通过在正确的位置从项目中明确引用此dll来解决它。 像这样:

<Reference Include="Microsoft.Data.Services.Client, Version=5.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\packages\Microsoft.Data.Services.Client.5.6.1\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
</Reference>

2
投票

我刚刚在构建服务器上遇到了同样的问题,在检查构建输出时我发现了以下内容:

将文件从“C:\ Program Files(x86)\ Microsoft WCF Data Services \ 5.6 \ bin.NETFramework \ Microsoft.Data.Edm.dll”复制到“bin \ Microsoft.Data.Edm.dll”。

似乎构建服务器上安装了一些不在我的机器上的东西,所以我需要跟踪它。


1
投票

它可能是IIS上虚拟路径的问题(我认为,这个程序集首先在应用程序启动时加载)。

当从磁盘上的不同位置启动两个项目但具有相同的虚拟路径时,我遇到了同样的问题。

解决方法是从IIS中删除此路径,重置IIS进程并从VS再次创建虚拟路径。


1
投票

找到了 !! 在app.config文件中更改bindingredirect版本。 make bindingredirect元素引用异常抱怨的版本,异常将消失。 说明: 可能app.config文件和项目引用程序集不同步,导致错误。

<runtime>
		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
			<dependentAssembly>
				<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
				<bindingRedirect oldVersion="0.0.0.0-5.6.4.0" newVersion="5.6.4.0" />
			</dependentAssembly>
		</assemblyBinding>
	</runtime>

0
投票

对我来说,我不得不卸载WindowsAzure.MobileServices.Backend.Entity NuGet包,它删除了很多程序集,包括Microsoft.Data.Edm。然后我只是重新安装它,奇迹般地,它工作了!

这是在我的Azure移动服务WebApi项目中,所以它需要工作,幸好现在它。

我希望这有帮助。


0
投票

通过关闭并重新打开Visual Studio,我成功地解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.