2012-12-06 1 views
0

Possible Duplicate:
When must we use extern alias keyword in C#?정적으로 C#으로 AssemblyQualifiedName에 의해 컴파일시 타입을 선언하는 방법

내가 솔루션의 다른 프로젝트에서 공유 파일로 주로 구성되어 어셈블리가 있습니다. 즉, 전체 솔루션은 약 10MB이지만,이 기능의 작은 하위 집합을 별도의 200KB 어셈블리로 내 보냅니다. 솔루션의 모든 프로젝트는 UI를 제외한 NUnit 테스트 프로젝트에 있습니다.

문제는 내가 공유 파일 중 하나에 대한 테스트를 추가 갔다이고, 나는 다음과 같은 오류 있어요 :

The type 'xxx' exists in both 'c:\path\to\project\Logic.dll' 
and 'c:\path\to\project\Exported.dll'. 

난 반사를 사용하고 어셈블리 자격을 갖춘 이름을 제공하거나, 내가 할 수 알을 내 보낸 어셈블리 테스트를 별도의 프로젝트로 제거 할 수 있지만 둘 다 고통 스러울 수 있습니다. 컴파일시 Logic.dll에서 xxx 버전을 사용하도록 지정하기 만하면됩니다. 이 컴파일시에 사용할 수있는 유형의 버전을 지정할 수 있습니다, 그래서 다음과 같습니다

xxx blah = new xxx(); 
blah.DoSomething(123); 

대신 :

Type t = Type.GetType("Logic.xxx, Logic"); 
object blah = Activator.CreateInstance(t); 
t.GetMethod("DoSomething").Invoke(blah, new object[] { 123 }); 
+0

'xxx'를 다른 네임 스페이스에 넣을 수는 없습니까? 그런 다음 namespace.xxx에 액세스합니다. blah = new namespace.xxx(); – Mark

+0

extern alias가 검색 할 수 있도록 존재하는지조차 알아야하기 때문에 중복되는 것은 아닙니다. 그러나 나는 그 대답을 실제 답변으로 게시한다면 그 대답으로 받아 들일 것입니다. –

답변

0

당신은에 따라 참조를 지정 할 수 있어야한다 네임 스페이스 원하는 객체 클래스가 있습니다. 이의 라인을 따라 뭔가 :

LogicNamespace.XXX blah = new LogicNamespace.XXX();

+0

내 보낸 라이브러리의 파일이 주 프로젝트의 파일과 완전히 동일하므로 다른 네임 스페이스를 가질 수 없습니다. 링크 일뿐입니다. 나는 두 권의 사본을 유지하고 싶지 않다. –

+0

가장 관련성이없는 답변 - OP는 동일한 소스에서 빌드했지만 2 개의 다른 어셈블리에서 오는 2 가지 유형을 구별하려고합니다. 따라서 네임 스페이스 + 유형 이름은 동일하지만 유일한 차이점은 어셈블리 이름입니다. –

+0

@AlexeiLevenkov 예, 맞습니다. Hans Passant의 대답은 내가 찾고있는 것이지만 그가 그것을 받아 들일 수있는 곳에 게시하지 않았습니다. –

관련 문제