问题描述
我们正在使用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文件夹具有两个库:
如果在正确的位置,为什么无法加载该库?
谢谢!
解决方法
最后,经过几个小时的研究,我得到了答案In this post,它的工作原理就像一个魅力!。
问题是带有“强名称”的签名程序集可以保护它们免于某种修改,包括文件名重命名。
我能够使用ReflexIL重命名该程序集,从而删除了“强名称”和“瞧”。