微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在ASP.NET MVC中加载同一库的两个版本

如何解决无法在ASP.NET MVC中加载同一库的两个版本

我们正在使用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,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链接使用该库的每个版本,例如:

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

bin文件夹具有两个库:

bin folder

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

error

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

谢谢!

解决方法

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

问题是带有“强名称”的签名程序集可以保护它们免于某种修改,包括文件名重命名。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。