同时引用同一个组件的两个版本
在我们开发项目时,引用组件一般都是使用Nuget获取最新稳定版本,不可能出现同一个组件,引用两个版本。但是有些小伙伴维护老系统时,发现有些组件是用以前的低版本,无法直接升级到最新稳定版本,升级了以后就会发现不兼容,高版本没有兼容低版本的,有些类、方法、属性不见了。不引入最新稳定版本,又无法在老项目中开发新的需求。因此,我们可以将两个版本都引入到项目中进行使用。旧版本我们不需要去动它,只需求把最新版本通过Nuget下载下来后,重名命组合名放到项目的固定目录下,再修改配置文件中组件的指定版本。看以下操作:
以iTextSharp为例。低版本是4.0.6.0,引入高版本5.5.13.2。
1、通过Nuget下载,将单元测试项目(可以随便新建个项目或其它方式,目的是下载组件)下 packages\iTextSharp.5.5.13.2\lib\itextsharp.dll ,拷贝到正式项目固定目录下(一般l项目下lib目录是存放第三方组)重名命为itextsharp.v5.dll。项目引用这个组件。
2、项目配置文件app.config增加
<dependentAssembly>
<assemblyIdentity name="iTextSharp" publicKeyToken="8354ae6d2174ddca" culture="neutral" />
<codeBase version="0.0.0.0-4.0.6.0" href="iTextSharp.dll" ></codeBase>
<codeBase version="5.5.13.2" href="iTextSharp.v5.dll" ></codeBase>
</dependentAssembly>
3、代码使用
extern alias iTextSharpV5; using iTextSharp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Nunit.Lizh.Test { [TestClass] public class ITextSharpTest { [TestMethod] public void test() { // 4.0 var v4= new iTextSharp.text.Document(); // 5.0 var v5= new iTextSharpV5.iTextSharp.text.Document(); } } }
注:使用iTextSharp5.5.13.2,还需引用BouncyCastle.Crypto1.8.6.0。