问题:
程序里加载了2个dll,这2个dll里都声明了同样的命名空间(这个不违法),然后在这个同样的命名空间下,他俩又定义了同名的interface。
然后我程序里直接using这个命名空间,使用这个interface的时候就有问题了,因为它已经被定义在2个地方了。
有没有啥语法可以显示指出我使用哪个dll里的命名空间里的该类型?
解决办法:
1. 用alias。
Main App:
extern alias Lib1; extern alias Lib2; using System; namespace ConsoleApp { class Program { static void Main(string[] args) { Console.WriteLine((new Lib1::MS.Lib.Class1()).Run()); Console.WriteLine((new Lib2::MS.Lib.Class1()).Run()); } } }
主程序设置。
Lib1:
namespace MS.Lib { public class Class1 { public string Run() { return "MS.Lib1.Class1Run()."; } } }
Lib 2:
namespace MS.Lib { public class Class1 { public string Run() { return "MS.Lib2.Class1Run()."; } } }
2. 用property DllImport如下:把Lab1 封到另一个namespace下。直接被主程序调用。
[DllImport("Lab1.dll", EntryPoint = "ChangeWindowMessageFilter", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool _ChangeWindowMessageFilter(WM message, MSGFLT dwFlag);