摘自:
https://www.cnblogs.com/mtudou/articles/7725335.html
有些不得已的時候,我們需要同時在代碼中使用某個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. 編譯成功,運行結果如下: