.Net中使用aliases(別名)讓相同命名空間的dll引用共存

摘自:

https://www.cnblogs.com/mtudou/articles/7725335.html

有些不得已的時候,我們需要同時在代碼中使用某個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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章