要解决C#中程序集之间的命名空间冲突,我给了NLog
的 Alias :
现在,我可以在这个程序集中引用名称空间,如下所示:
public class Logger : NLog::NLog.LogReceiverService
{
// ...
}
但是,在我使用文件顶部的extern alias
关键字之前,这不会编译:
extern alias NLog;
我的问题:
extern alias
关键字的用途是什么? NLog::NLog.LogReceiverService
不应该足以完全消除我所指的程序集别名,命名空间和类型的歧义吗?
答案 0 :(得分:4)
在引用上设置Aliases属性只会将其指定为该别名,而初始加载的程序集引用是作为运行时为您的项目完成的。要在文件中使用该别名程序集引用,必须指定您将通过extern alias关键字使用它,该关键字设置编译器指令以查找该别名。
你会认为他们会有某种类型的全局别名,但我认为他们强制使用显式别名,因为别名会导致性能损失。
以下是extern别名的参考资料:http://msdn.microsoft.com/en-us/library/ms173212.aspx