当我在Visual Studio 8中将程序集引用添加到项目时,该引用的Aliases属性将设置为“ global”。此属性有什么用处?为什么设置为global?
MSDN告诉我,这是程序集别名的列表,但不是为什么我可能要使用此属性,或者为什么大多数别名都为“ global”。
Answers:
这用于“外部别名”。假设您要使用两种不同的类型,这两种类型都被调用Foo.Bar
(即Bar
在的命名空间中Foo
)。这两种类型将位于不同的程序集中(根据定义)-您可以使用VS中的属性将别名与每个引用关联,然后可以执行以下操作:
extern alias FirstAlias;
extern alias SecondAlias;
using FirstBar = FirstAlias::Foo.Bar;
using SecondBar = SecondAlias::Foo.Bar;
然后在代码中使用FirstBar
和SecondBar
。
因此,基本上,这是一种额外的命名方式-除非确实需要,否则不应该使用它。这会使很多人感到困惑。首先尝试避免陷入这种情况-但是在您无法避免的情况下,请注意此解决方案。
Infragistics4.Documents.Excel.v13.2
并InfragisticsWPF4.Documents.Excel.v13.2
有这个问题。在合并将Windows.Forms和WPF混合在一起的两个项目的过程中。
搜索“ extern别名”;它是很少使用的功能,仅需要在贡献相同类型的两个dll之间进行歧义消除(例如,同一程序集的两个不同版本,或者两个程序集具有一个完全限定名称的类)。
默认为“ global”。例如,如果您有一个名为的类Foo.System
,则可以通过明确地引用主System
名称空间global::System
。
System.Func<TResult>
委托(也许可以复制V3.5语法吗?)……当然,当.Net V4项目引用了第三方图书馆。使用别名,我避免了冲突(Visual Studio仍然有一些麻烦并可以检测错误,但编译器则没有)。使用extern关键字(今天是我第一次使用),我能够在第3方库中显式定位类型。我对必须在非冲突类型上使用别名感到有些惊讶。