2008-11-13 3 views
57

Visual Studio 8의 프로젝트에 어셈블리 참조를 추가하면 해당 참조의 별칭 속성이 "전역"으로 설정됩니다. 이 속성은 무엇을 위해 좋은 것이며 왜 그것이 전역으로 설정되어 있습니까?Visual Studio 8의 어셈블리 참조의 Aliases 속성은 무엇입니까?

MSDN은이 어셈블리의 별칭 목록이지만이 속성을 사용하려는 이유 또는 대부분의 경우 "전역"으로 별칭이 지정되지 않은 이유를 알려줍니다.

MSDN reference

답변

98

"extern aliases"용입니다. Foo.Bar (즉, FooBar)이라는 두 가지 유형을 사용한다고 가정 해 보겠습니다. 두 가지 유형 (정의에 의해) 다른 어셈블리에있을 것입니다 - 당신은 당신이 할 수있는, 각 참조하여 별칭을 연결하는 VS의 속성을 사용 :

extern alias FirstAlias; 
extern alias SecondAlias; 

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

를 다음 코드에서 FirstBarSecondBar를 사용합니다.

그래서 기본적으로 추가 이름 지정 수준입니다. 실제로 사용하지 않으면 사용해서는 안됩니다. 그것은 많은 사람들을 혼란스럽게 할 것입니다. 먼저 그 상황에 빠지지 않도록 노력하십시오. 그러나 피할 수없는 시대에이 솔루션을 알고 있어야합니다.

+1

제 3의 공급 업체가 .Net V2에서 System.Func 델리게이트 (V3.5 구문을 복제 한 것일 수도 있습니다)를 실행하는 제품을 출시했을 때 ... 문제가 있었지만, .Net V4 프로젝트가 타사 라이브러리를 참조 할 때 발생합니다. 별칭을 사용하여 충돌을 피했습니다 (Visual Studio는 컴파일러가 아닌 일부 문제 및 오류를 감지했습니다). extern 키워드 (오늘 처음 사용)를 사용하여 제 3 자 라이브러리에서 유형을 명시 적으로 타겟팅 할 수있었습니다. 비 충돌 유형에서 별칭을 사용해야하는 것에 약간 놀랐습니다. –

+1

'Infragistics4.Documents.Excel.v13.2'와'InfragisticsWPF4.Documents.Excel.v13.2'에는이 문제가 있습니다. Windows.Forms와 WPF가 혼합 된 두 프로젝트를 병합하는 과정에서. – AMissico

30

"extern alias"에 대한 검색; 동일한 형식의 두 dll (예 : 동일한 어셈블리의 두 가지 버전 또는 정규화 된 이름을 공유하는 클래스가있는 두 개의 어셈블리) 사이의 모호성을 제거하는 데 필요한 기능은 거의 사용되지 않는 기능입니다.

"global"이 기본값입니다. 예를 들어, Foo.System 클래스가있는 경우 global::System을 통해 System 메인 공간을 명확하게 참조 할 수 있습니다.

관련 문제