Visual Studio 8 中程序集引用的 Aliases 属性有啥用

Posted

技术标签:

【中文标题】Visual Studio 8 中程序集引用的 Aliases 属性有啥用【英文标题】:What use is the Aliases property of assembly references in Visual Studio 8Visual Studio 8 中程序集引用的 Aliases 属性有什么用 【发布时间】:2010-09-22 03:30:31 【问题描述】:

当我在 Visual Studio 8 中向项目添加程序集引用时,该引用的 Aliases 属性设置为“全局”。这个属性有什么用?为什么要设置为全局?

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

MSDN reference

【问题讨论】:

【参考方案1】:

搜索“extern alias”;这是一个很少使用的功能,只需要在提供相同类型的两个 dll 之间消除歧义(例如,同一程序集的两个不同版本,或具有共享完全限定名称的类的两个程序集)。

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

【讨论】:

工作链接:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…【参考方案2】:

这是用于“外部别名”的。假设您要使用两种不同的类型,它们都称为Foo.Bar(即BarFoo 的命名空间中)。这两种类型将位于不同的程序集中(根据定义)-您使用 VS 中的属性将别名与每个引用关联,然后您可以这样做:

extern alias FirstAlias;
extern alias SecondAlias;

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

然后在您的代码中使用FirstBarSecondBar

所以基本上它是一个额外的命名层次——除非你真的、真的必须这样做,否则你不应该使用它。它会让很多人感到困惑。一开始就尽量避免陷入这种情况 - 但在无法避免的时候请注意这种解决方案。

【讨论】:

我遇到过这样的情况,当第 3 方供应商交付在 .Net V2 上运行的产品时,带有 System.Func<TResult> 委托(可能是为了复制 V3.5 语法?)...问题,当然,当 .Net V4 项目引用 3rd 方库时会发生。使用别名,我避免了冲突(Visual Studio 仍然有一些麻烦和检测错误,但不是编译器)。使用 extern 关键字(我今天第一次使用),我能够明确地定位 3rd 方库中的类型。不得不在非冲突类型上使用别名,我有点惊讶。 Infragistics4.Documents.Excel.v13.2InfragisticsWPF4.Documents.Excel.v13.2 有这个问题。在合并将混合 Windows.Forms 和 WPF 的两个项目的过程中。 Reference 的 Aliases 属性是否消失了?我正在使用 VS 2017 社区,但我找不到这个选项! @PedroGaspar:嗯——不确定。明天得看看。

以上是关于Visual Studio 8 中程序集引用的 Aliases 属性有啥用的主要内容,如果未能解决你的问题,请参考以下文章

由于缺少未丢失的程序集引用,Visual Studio拒绝构建项目

如何在 Visual Studio 中将源附加到引用的程序集

程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?

程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?

在 Visual Studio 2013 中,如何将代码分析限制为我的代码而不是引用的程序集?

Visual Studio 2010 程序集签名:尝试引用不存在的令牌