.Net中使用aliases让相同命名空间的dll引用共存
2024-08-23 03:16:37
有些不得已的时候,我们需要同时在代码中使用某个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. 编译成功,运行结果如下:
最新文章
- 转:导出/导入Eclipse的workspace配置(备份Eclipse配置)
- Hive 一些便捷小查询
- (转)各种排序算法的分析及java实现
- objective-c中是如何实现线程同步的?
- C语言中指针的指针是如何工作的?
- Miller_Rabin、 Pollard_rho Template
- 最简单也最难——如何获取到Android控件的高度
- Spring实例
- c++类的构造函数详解
- iOS开发之判断横竖屏切换
- 38. leetcode 405. Convert a Number to Hexadecimal
- Use LiveCD to acquire images from a VM
- Spark思维导图之性能优化
- 阿里云 nginx配置ssl证书实现https访问
- linux(centos 7)下安装elasticsearch 5 的 IK 分词器
- React/anu实现Touchable
- 【 python】输出随机的字符或数字
- PCL中IO模块和类的介绍
- Object.defineProperty方法 使用
- Spring 一二事(8) - annotation 形式的 MVC