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

时间:2014-08-07 06:24:25

标签: c# .net azure dll

我们正在使用Windows Azure存储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。有谁知道为什么会发生这种情况,之前从未遇到过这个问题。

11 个答案:

答案 0 :(得分:20)

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

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

答案 1 :(得分: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

答案 2 :(得分: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软件包。然后再次安装并确保只安装稳定版本。
  5. HTH。

答案 3 :(得分: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>

答案 4 :(得分:2)

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

  

从&#34; C:\ Program Files(x86)\ Microsoft WCF数据中复制文件   服务\ 5.6 \ bin.NETFramework \ Microsoft.Data.Edm.dll&#34;至   &#34;箱\ Microsoft.Data.Edm.dll&#34;

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

答案 5 :(得分:1)

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

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

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

答案 6 :(得分:1)

发现它!!
在app.config文件中更改 bindingredirect 版本。
make bindingredirect元素引用异常抱怨的版本,异常将消失 的解释
可能app.config文件和项目引用程序集不同步,导致错误。

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

答案 7 :(得分:0)

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

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

我希望这会有所帮助。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

1)将“构建详细度”更改为“详细” 2)搜索Microsoft.Data.Edm并比较项目中使用的其他程序集的版本 3)更新到其他程序集中使用的版本

解决了我的问题

答案 10 :(得分:0)

删除了“ packages”文件夹并重新安装软件包后,出现此错误。我可以通过运行“清洁解决方案”和“重建解决方案”来解决该错误。