我对此完全感到惊讶。
我有一个Asp.Net MVC v 5.2.3项目。
[当我包含https://github.com/NicoJuicy/ngravatar时(尚未在默认的nuget仓库中发布)。
[NGravatar nuget包示例可在Mvc v。5.2.3上运行。
当我将其包含在我自己的项目中时,OData dll给我一个错误:
System.IO.FileLoadException: 'Could not load file or assembly 'Microsoft.OData.Core, Version=7.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)'
当我删除NGravatar软件包时。错误消失了。
项目中使用的odata版本为5.18版。所以我不希望运行时错误建议使用v 7.6.1.0。
简而言之,当不使用NGravatar时。 OData使用正确的版本。包括NGravatar时,软件包版本会神奇地更新。
这可能是什么原因?
我在二进制文件上运行了AsmSpy,它给出了这个:
Reference: Microsoft.OData.Core
Microsoft.OData.Core, Version=6.10.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Source: NotFound
6.10.0.0 by System.Web.OData, Version=5.5.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Microsoft.OData.Core, Version=6.19.0.11114, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Source: Local, Location: C:\source\Shop\src\Presentation\Legacy\Shop.Front\bin\Microsoft.OData.Core.dll
Microsoft.OData.Core, Version=7.6.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Source: NotFound
7.6.1.0 by Microsoft.AspNet.OData, Version=7.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
所以我注意到重定向未正确进行。因此,根据我从AsmSpy获得的信息以及bin目录中的dll版本(v 6.15.0.0),我添加了以下内容:
<dependentAssembly>
<assemblyIdentity name="Microsoft.OData.Core" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-6.19.0.11114" newVersion="6.15.0.0" />
</dependentAssembly>
使用递归方法,我继续更新直到Microsoft.AspNet.OData
我不知道为什么NGravatar触发了这个。
简而言之,当不使用NGravatar时。 OData使用正确的版本。包括NGravatar时,软件包版本会神奇地更新。
我认为主要问题与您自己的项目本身或VS环境有关。
检查nuget软件包Microsoft.OData.Core和NGravatar,我发现它们之间没有依赖关系,只有两个独立的,无干扰的软件包。在我这边,我进行了测试,没有遇到您所描述的问题。
因此,我想知道当前项目中的其他nuget软件包依赖项是否混乱或重定向关系是否混乱,或者全局软件包缓存地址中的问题是否会影响该项目,等等。因为我没有您的项目样本或VS环境,因此请仔细检查您的身边。
您可以尝试以下建议来解决问题:
1] clean all nuget caches或删除C:\Users\xxx(current user)\.nuget\packages
]下的所有文件
[2)
关闭VS实例,删除文件夹,.vs
和bin
文件夹下的obj
隐藏文件夹。[3)
禁用扩展->管理扩展下的任何第三方扩展,以防它们引起此异常行为。4)
在update-package -reinstall
-> Tools
-> NuGet Packager Manager
下运行Package Manager Console
以重新建立关系。此后,运行Get-Project -All | Add-BindingRedirect
以重新安装重新绑定。
然后请在Web.config
文件中添加这些节点以重新绑定要由项目标识的Microsoft.Odata.core
程序集
<dependentAssembly> <assemblyIdentity name="Microsoft.OData.Core" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-6.19.0.11114" newVersion="6.18.0.10905" /> </dependentAssembly>
希望它可以帮助您。