包括NGravatar导致未找到OData.Core dll(并且使用更高版本)

问题描述 投票:0回答:2

我对此完全感到惊讶。

我有一个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软件包在NGravatar中的任何地方都没有使用,并且不需要它。
  • Web项目使用.net framework 4.6.1
  • Nuget程序包使用.Net Framework 4.6.0编译

项目中使用的odata版本为5.18版。所以我不希望运行时错误建议使用v 7.6.1.0。

  • 已移除包装并安装了3次。包含NGravatar时始终会出现错误。卸载时从未出现错误。

简而言之,当不使用NGravatar时。 OData使用正确的版本。包括NGravatar时,软件包版本会神奇地更新。

这可能是什么原因?

c# visual-studio dll nuget nuget-package
2个回答
1
投票

我在二进制文件上运行了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触发了这个。


0
投票

简而言之,当不使用NGravatar时。 OData使用正确的版本。包括NGravatar时,软件包版本会神奇地更新。

我认为主要问题与您自己的项目本身或VS环境有关。

检查nuget软件包Microsoft.OData.CoreNGravatar,我发现它们之间没有依赖关系,只有两个独立的,无干扰的软件包。在我这边,我进行了测试,没有遇到您所描述的问题。

因此,我想知道当前项目中的其他nuget软件包依赖项是否混乱或重定向关系是否混乱,或者全局软件包缓存地址中的问题是否会影响该项目,等等。因为我没有您的项目样本或VS环境,因此请仔细检查您的身边。

您可以尝试以下建议来解决问题:

1] clean all nuget caches或删除C:\Users\xxx(current user)\.nuget\packages]下的所有文件

[2)

关闭VS实例,删除文件夹,.vsbin文件夹下的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>

希望它可以帮助您。

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