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
(即Bar
在Foo
的命名空间中)。这两种类型将位于不同的程序集中(根据定义)-您使用 VS 中的属性将别名与每个引用关联,然后您可以这样做:
extern alias FirstAlias;
extern alias SecondAlias;
using FirstBar = FirstAlias::Foo.Bar;
using SecondBar = SecondAlias::Foo.Bar;
然后在您的代码中使用FirstBar
和SecondBar
。
所以基本上它是一个额外的命名层次——除非你真的、真的必须这样做,否则你不应该使用它。它会让很多人感到困惑。一开始就尽量避免陷入这种情况 - 但在无法避免的时候请注意这种解决方案。
【讨论】:
我遇到过这样的情况,当第 3 方供应商交付在 .Net V2 上运行的产品时,带有System.Func<TResult>
委托(可能是为了复制 V3.5 语法?)...问题,当然,当 .Net V4 项目引用 3rd 方库时会发生。使用别名,我避免了冲突(Visual Studio 仍然有一些麻烦和检测错误,但不是编译器)。使用 extern 关键字(我今天第一次使用),我能够明确地定位 3rd 方库中的类型。不得不在非冲突类型上使用别名,我有点惊讶。
Infragistics4.Documents.Excel.v13.2
和 InfragisticsWPF4.Documents.Excel.v13.2
有这个问题。在合并将混合 Windows.Forms 和 WPF 的两个项目的过程中。
Reference 的 Aliases 属性是否消失了?我正在使用 VS 2017 社区,但我找不到这个选项!
@PedroGaspar:嗯——不确定。明天得看看。以上是关于Visual Studio 8 中程序集引用的 Aliases 属性有啥用的主要内容,如果未能解决你的问题,请参考以下文章
由于缺少未丢失的程序集引用,Visual Studio拒绝构建项目
如何在 Visual Studio 中将源附加到引用的程序集
程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?
程序集引用的“特定版本”属性在 Visual Studio 中究竟是如何工作的?