有些不得已的时候,我们需要同时在代码中使用某个dll的不同版本。比如用低版本的dll中的方法导出数据,然后使用高版本的方法导入数据来实现数据的升级. 又或者需要同时使用第三方的dll不同版本。如何使它们并存于系统中是个难题。

如果同时存在于系统中,会出现ambiguous refrence(有歧义的引用)的编译错误。下文介绍如何使用aliases解决这个问题。

一, 构建两个不同版本的Project

首先构建2个不同的Project来模拟不同版本的dll引用, 这两个project中的命名空间和类名完全相同。

在MultipleVersionTest项目中同时引用这两个Project. 如下图:

HighVersion项目中的代码

public class NameProvider
{
public static string GetName()
{
return "Name From high version";
}
}

LowVersion项目中的代码

public class NameProvider
{
public static string GetName()
{
return "Name From Low version";
}
}

在MultipleVersionTest项目中,

class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(NameProvider.GetName());
System.Console.ReadLine();
}
}

从下图能看出来, 出现的编译错误。

二,使用aliases区分不同的dll

1. 在MultipleVersiontTest项目中,分别修改应用的Aliases, 从默认的global改成low和high

2. 使用extern alias,区分不同版本dll中的类

extern alias low;
extern alias high; namespace MultipleVersionTest
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine(low::NameFactory.NameProvider.GetName());
System.Console.WriteLine(high::NameFactory.NameProvider.GetName());
System.Console.ReadLine();
}
}
}

3. 编译成功,运行结果如下:

最新文章

  1. 转:导出/导入Eclipse的workspace配置(备份Eclipse配置)
  2. Hive 一些便捷小查询
  3. (转)各种排序算法的分析及java实现
  4. objective-c中是如何实现线程同步的?
  5. C语言中指针的指针是如何工作的?
  6. Miller_Rabin、 Pollard_rho Template
  7. 最简单也最难——如何获取到Android控件的高度
  8. Spring实例
  9. c++类的构造函数详解
  10. iOS开发之判断横竖屏切换
  11. 38. leetcode 405. Convert a Number to Hexadecimal
  12. Use LiveCD to acquire images from a VM
  13. Spark思维导图之性能优化
  14. 阿里云 nginx配置ssl证书实现https访问
  15. linux(centos 7)下安装elasticsearch 5 的 IK 分词器
  16. React/anu实现Touchable
  17. 【 python】输出随机的字符或数字
  18. PCL中IO模块和类的介绍
  19. Object.defineProperty方法 使用
  20. Spring 一二事(8) - annotation 形式的 MVC

热门文章

  1. iOS版本比较方法
  2. MVC之前的那点事儿系列
  3. jquery内容选择器(匹配包含指定选择器的元素)
  4. 求助,eclipse总是卡在building workspace-CSDN论坛
  5. idea配置maven并添加镜像配置
  6. Python遍历文件夹
  7. 「Ionic」使用chrom時的跨域問題
  8. Python私有函数和公开函数
  9. 更新整理本人所有博文中提供的代码与工具(C++,2013.10)
  10. 代码验证浏览器是否支持html audio 和video