zoukankan      html  css  js  c++  java
  • .Net中使用aliases让相同命名空间的dll引用共存

    有些不得已的时候,我们需要同时在代码中使用某个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

     
  • 相关阅读:
    QT开发之旅一DS7400主机调试工具
    读《程序员,你伤不起》杂感(附带分享两个项目源码)
    这些年过上幸福生活的程序员(中篇)
    这些年过上幸福生活的程序员(上篇)
    如果第三方数据表与系统数据库里的表名格式不一致的解决方案
    数据库设计原则
    MYSQL密码设置
    关于phpmyadmin #1045无法登陆服务器的问题
    TP快捷函数
    跨控制器调用
  • 原文地址:https://www.cnblogs.com/webenh/p/7692769.html
Copyright © 2011-2022 走看看