我们正在使用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。有谁知道为什么会发生这种情况,之前从未遇到过这个问题。
答案 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构建输出详细程度来识别有问题的项目,我们能够在我们的某台机器上跟踪问题:
然后,我们搜索输出并通过搜索“Microsoft.Data.Edm”识别出有问题的目标项目。我们注意到它似乎与Microsoft.Data.Edm有间接依赖关系,但是我们注意到程序集没有明确地包含在该项目的包中。因此,使用Nuget包控制台,我们针对该项目并运行:
Install-Package Microsoft.Data.Edm
这解决了这个问题。
答案 2 :(得分:3)
您可以尝试以下几点:
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文件和项目引用程序集不同步,导致错误。
<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;
答案 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”文件夹并重新安装软件包后,出现此错误。我可以通过运行“清洁解决方案”和“重建解决方案”来解决该错误。