什么是Visual Studio 8中程序集引用的Aliases属性


69

当我在Visual Studio 8中将程序集引用添加到项目时,该引用的Aliases属性将设置为“ global”。此属性有什么用处?为什么设置为global?

MSDN告诉我,这是程序集别名的列表,但不是为什么我可能要使用此属性,或者为什么大多数别名都为“ global”。

MSDN参考

Answers:


122

这用于“外部别名”。假设您要使用两种不同的类型,这两种类型都被调用Foo.Bar(即Bar在的命名空间中Foo)。这两种类型将位于不同的程序集中(根据定义)-您可以使用VS中的属性将别名与每个引用关联,然后可以执行以下操作:

extern alias FirstAlias;
extern alias SecondAlias;

using FirstBar = FirstAlias::Foo.Bar;
using SecondBar = SecondAlias::Foo.Bar;

然后在代码中使用FirstBarSecondBar

因此,基本上,这是一种额外的命名方式-除非确实需要,否则不应该使用它。这会使很多人感到困惑。首先尝试避免陷入这种情况-但是在您无法避免的情况下,请注意此解决方案。


1
我遇到的情况是,当第三方供应商运送在.Net V2上运行的产品时,带有System.Func<TResult>委托(也许可以复制V3.5语法吗?)……当然,当.Net V4项目引用了第三方图书馆。使用别名,我避免了冲突(Visual Studio仍然有一些麻烦并可以检测错误,但编译器则没有)。使用extern关键字(今天是我第一次使用),我能够在第3方库中显式定位类型。我对必须在非冲突类型上使用别名感到有些惊讶。
史蒂夫·B

2
Infragistics4.Documents.Excel.v13.2InfragisticsWPF4.Documents.Excel.v13.2有这个问题。在合并将Windows.Forms和WPF混合在一起的两个项目的过程中。
AMissico

引用的别名属性是否消失了?我正在使用VS 2017社区,但找不到此选项!
Pedro Gaspar '18

@PedroGaspar:嗯-不知道。明天要看。
乔恩·斯基特

32

搜索“ extern别名”;它是很少使用的功能,仅需要在贡献相同类型的两个dll之间进行歧义消除(例如,同一程序集的两个不同版本,或者两个程序集具有一个完全限定名称的类)。

默认为“ global”。例如,如果您有一个名为的类Foo.System,则可以通过明确地引用主System名称空间global::System


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.