2008-11-13 4 views
57

Когда я добавляю ссылку на сборку для проекта в Visual Studio 8, свойство «Псевдонимы» этой ссылки устанавливается в «глобальный». Для чего это свойство хорошо и почему оно настроено на глобальное?Что такое свойство «Алиасы» ссылок на сборки в Visual Studio 8

MSDN сообщает мне, что это список псевдонимов для сборки, но не почему я могу использовать это свойство или почему большинство из них псевдонимы как «глобальные».

MSDN reference

ответ

98

Это для «внешних псевдонимов». Предположим, вы хотите использовать два разных типа, оба из которых называются Foo.Bar (т. Е. Bar в пространстве имен Foo). Эти два типа будут находиться в разных сборках (по определению) - используется свойство в VS, чтобы связать псевдоним с каждой ссылкой, то вы можете сделать:

extern alias FirstAlias; 
extern alias SecondAlias; 

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

, а затем использовать FirstBar и SecondBar в вашем коде.

Таким образом, в основном это дополнительный уровень именования - и вы не должны использовать его, если вам действительно не нужно. Это смутит многих людей. Старайтесь не вникать в эту ситуацию в первую очередь - но будьте в курсе этого решения в те времена, когда вы просто не можете этого избежать.

+1

У меня был случай, когда сторонний поставщик отправляет продукт, работающий на .Net V2, с делегатом `System.Func ` (возможно, для репликации синтаксиса V3.5?) ... проблемы, конечно, происходит, когда проект .Net V4 ссылается на стороннюю библиотеку. Используя псевдоним, я избегал конфликтов (у Visual Studio все еще есть проблемы и обнаружение ошибок, но не компилятор). Используя ключевое слово extern (первый раз, когда я использую сегодня), я смог явно настроить таргетинг на тип в сторонней библиотеке. Я просто немного удивлен тем, что должен использовать псевдоним на неконфликтном типе. – 2011-09-22 15:08:46

30

Поиск "extern alias"; это очень редко используемая функция, которая необходима только для устранения неоднозначности между двумя dll, которые вносят одни и те же типы (например, две разные версии одной и той же сборки или две сборки, у которых есть класс, который имеет полное имя).

По умолчанию используется «global». Например, если у вас есть класс с именем Foo.System, вы можете однозначно обратиться к основному пространству имен System через global::System.