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

Posted

技术标签:

【中文标题】无法加载文件或程序集“Microsoft.Data.Edm”【英文标题】:Could not load file or assembly 'Microsoft.Data.Edm' 【发布时间】:2014-09-30 06:46:25 【问题描述】:

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

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

【问题讨论】:

是否有人从他们的 bin 文件夹中签入了该程序集的罪魁祸首版本? 您可以尝试在您的引用上设置 CopyLocal=True。 您使用什么工具向您展示这些潜在冲突?我正在使用 ILSpy,但您的工具看起来更快。 【参考方案1】:

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

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

【讨论】:

我的不是那三个(我有 Microsoft.Data.Services.Client 并且没有 System.Spatial)但是是的 DELETE DELETE DELETE 并且它消失了【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

您可以尝试以下几件事:

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

HTH。

【讨论】:

对我来说,卸载 WindowsAzure.Storage Nuget 包,然后重新安装它解决了我的 Could not load file or assembly 'Micorosft.Data.OData' 错误问题。【参考方案4】:

我今天遇到了类似的情况,在我的情况下,构建总是将旧版本的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>

【讨论】:

【参考方案5】:

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

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

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

【讨论】:

是否需要在 Package.config 中更改? 我遇到了这个问题:***.com/questions/69875132/…【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

找到了!! 在您的 app.config 文件中更改 bindingredirect 版本。 使 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>

【讨论】:

我试过你的答案:***.com/questions/69875132/… 但现在它的错误与此不同【参考方案8】:

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

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

我希望这会有所帮助。

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

1) 将 Build Verbosity 设置为Detailed 2)搜索Microsoft.Data.Edm,对比项目中使用的其他程序集的版本 3) 更新到其他程序集中使用的版本

解决了我的问题

【讨论】:

【参考方案11】:

我在删除“包”文件夹并重新安装包后收到此错误。我能够通过运行“清洁解决方案”和“重建解决方案”来解决错误。

【讨论】:

以上是关于无法加载文件或程序集“Microsoft.Data.Edm”的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 未能加载文件或程序集

请教vs2010提示未能加载包的问题,怎么解决?

未能从程序集 C:Program Files (x86)MSBuild14.0inMicrosoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClea(示例代码

Visual Studio 2015 发布错误

能加载文件或程序集“Aspose.Cells”或它的某一个依赖项。无法验证强名称签名

无法加载文件或程序集,但已加载