无法在 ASP.NET MVC 中加载同一库的两个版本
Impossible to load two versions of the same libary in ASP.NET MVC
我们正在使用 Telerik kendo 库,它允许我们在 ASP.NET MVC 项目中使用高级 UI 小部件。上周我被鼓励升级库,但我们认为我们可以将同一个库链接两次,尝试在某些视图中升级库并进行迁移。
但是我的尝试失败了。
我在 csproj 中注册了两个版本的 Telerik kendo 程序集和库名称为 Kendo.Mvc 的库,为此我重命名了两个库,并使用以下代码在项目中引用堵塞。此外,我使用 'extern aliases':
创建别名来引用每个库版本
<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 文件夹有两个库:
但是当我启动项目时,它显示一个错误,显示无法找到一个库:
如果库在正确的位置,为什么它无法加载?
谢谢!
经过几个小时的研究,我终于找到了答案 In this post,而且效果非常好!
问题是带有“强名称”的签名程序集保护它免受某种修改,在它们之间,文件重命名。
我能够使用 ReflexIL 重命名程序集,删除“强名称”,瞧瞧。
我们正在使用 Telerik kendo 库,它允许我们在 ASP.NET MVC 项目中使用高级 UI 小部件。上周我被鼓励升级库,但我们认为我们可以将同一个库链接两次,尝试在某些视图中升级库并进行迁移。
但是我的尝试失败了。
我在 csproj 中注册了两个版本的 Telerik kendo 程序集和库名称为 Kendo.Mvc 的库,为此我重命名了两个库,并使用以下代码在项目中引用堵塞。此外,我使用 'extern aliases':
创建别名来引用每个库版本<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 文件夹有两个库:
但是当我启动项目时,它显示一个错误,显示无法找到一个库:
如果库在正确的位置,为什么它无法加载?
谢谢!
经过几个小时的研究,我终于找到了答案 In this post,而且效果非常好!
问题是带有“强名称”的签名程序集保护它免受某种修改,在它们之间,文件重命名。
我能够使用 ReflexIL 重命名程序集,删除“强名称”,瞧瞧。