【问题标题】:Impossible to load two versions of the same libary in ASP.NET MVC无法在 ASP.NET MVC 中加载同一库的两个版本
【发布时间】:2020-10-26 13:19:25
【问题描述】:

我们正在使用 Telerik kendo 库,它允许我们在 ASP.NET MVC 项目中使用高级 UI 小部件。上周有人鼓励我升级库,但我们认为我们可以将同一个库链接两次,尝试在某些视图中升级库并同时进行迁移。

但是我的尝试失败了。

我在 csproj 中注册了两个版本的 Telerik kendo 库,其程序集和库名称为 Kendo.Mvc,为此我重命名了这两个库,并使用以下代码块在项目中引用。此外,我使用“外部别名”创建别名来引用每个库版本:

<Reference Include="Kendo.Mvc.2020, Version=2020.3.1021.545, Culture=neutral, PublicKeyToken=121FAE78165BA3D4">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\vendor\Kendo.Mvc.2020.dll</HintPath>
  <Aliases>Kendo_2020</Aliases>
  <Private>True</Private>
</Reference>
<Reference Include="Kendo.Mvc.2016, Version=2016.3.1118.545, Culture=neutral, PublicKeyToken=29AC1A93EC063D92">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>..\vendor\Kendo.Mvc.2016.dll</HintPath>
  <Aliases>Kendo_2016</Aliases>
  <Private>True</Private>
</Reference>

之后我更改了 web.config 中的代码库以显示适当的库版本:

  <dependentAssembly>
    <assemblyIdentity name="Kendo.Mvc" publicKeyToken="29AC1A93EC063D92" culture="neutral" />   
    <bindingRedirect oldVersion="0.0.0.0-2016.3.1118.545" newVersion="2016.3.1118.545" />
    <codeBase version="2016.3.1118.545" href="Kendo.Mvc.2016.dll"/>
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Kendo.Mvc" publicKeyToken="121FAE78165BA3D4" culture="neutral" />
    <bindingRedirect oldVersion="2016.3.1118.546-2020.3.1021.545" newVersion="2020.3.1021.545" />
    <codeBase version="2020.3.1021.545" href="Kendo.Mvc.2020.dll"/>
  </dependentAssembly>

然后我尝试使用外部链接使用库的每个版本,如下所示:

extern alias Kendo_2016;
using Kendo_2016.Kendo.Mvc.Extensions;
using Kendo_2016.Kendo.Mvc.UI;
...

bin 文件夹有两个库:

但是当我启动项目时,它显示一个错误,表明无法找到库:

如果库在正确的位置,为什么它无法加载?

谢谢!

【问题讨论】:

  • 我会和 Telerik 核实一下,看看你是否能做到这一点。 “只有一个库版本”可能是“设计使然”。
  • 好的,谢谢,我去问问 Telerik 的工作人员!
  • 请注意,错误消息并不是说找不到库,而是说 NAME 不匹配,倒数第二行
  • 你好@camilo-terevinto,你是对的,也许这个“名称”属性来自签名证书,它试图将文件名与这个属性匹配。我问 Telerik,还在等待答案......我会在这里发布任何消息
  • 最后是binary的StrongName问题,用reflectil去掉后问题就解决了。

标签: c# asp.net asp.net-mvc kendo-asp.net-mvc


【解决方案1】:

最后,经过几个小时的研究,我得到了答案In this post,它就像一个魅力!

问题在于,使用“强名称”签名的程序集可以保护它免受某种修改,它们之间,文件重命名。

我能够使用 ReflexIL 重命名程序集,删除“强名称”,瞧。

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多