.Net中使用aliases让相同命名空间的dll引用共存_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > .Net中使用aliases让相同命名空间的dll引用共存

.Net中使用aliases让相同命名空间的dll引用共存

 2013/11/12 20:45:19  JustRun  博客园  我要评论(0)
  • 摘要:有些不得已的时候,我们需要同时在代码中使用某个dll的不同版本。比如用低版本的dll中的方法导出数据,然后使用高版本的方法导入数据来实现数据的升级.又或者需要同时使用第三方的dll不同版本。如何使它们并存于系统中是个难题。如果同时存在于系统中,会出现ambiguousrefrence(有歧义的引用)的编译错误。下文介绍如何使用aliases解决这个问题。一,构建两个不同版本的Project首先构建2个不同的Project来模拟不同版本的dll引用,这两个project中的命名空间和类名完全相同
  • 标签:.net 使用 net ASE

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

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

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

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

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

blog1

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();
       }
}

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

blog2

二,使用aliases区分不同的dll

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

blog11

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. 编译成功,运行结果如下:

blog22

发表评论
用户名: 匿名