2010-11-18 1 views
8

내가 분명한 사실을 놓치고있는 경우 사과드립니다.하지만 Reflection.Emit을 사용하여 새 유형을 만들 때 어떤 네임 스페이스가 있어야하는지 지정하려면 어떻게해야합니까? 즉Reflection.Emit을 통해 만든 유형의 네임 스페이스를 지정하는 방법?

..

AssemblyName assemblyName = new AssemblyName(); 
assemblyName.Name = "TestDynamic"; 

AssemblyBuilder assemblyBuilder = 
    AppDomain.CurrentDomain.DefineDynamicAssembly(
     assemblyName, 
     AssemblyBuilderAccess.Save); 

ModuleBuilder moduleBuilder =  
    AssemblyBuilder.DefineDynamicModule("TestDynamic", "TestDynamic.dll"); 

TypeBuilder myTestInterface = 
    moduleBuilder.DefineType("MyTestInterface", 
    TypeAttributes.Public | TypeAttributes.Interface, typeof(object)); 

어떻게 에 대한 네임 스페이스를 제공합니까?

답변

11

당신이 유형 정의 곳을 정의

moduleBuilder.DefineType("MyNamespace.MyTestInterface", 
       TypeAttributes.Public | TypeAttributes.Interface, 
       typeof(object)); 
+0

D' oh! 나는 그것이 명백한 무엇인가 분명해야한다는 것을 알았다. 고마워. –

0

그냥 "짧은"유형 이름 전에 넣어. "Namespace.Subnamespace.Type"

+0

그건 사실이 아니야 유형은 범위 (어셈블리, 모듈 또는 유형이 중첩 된 경우 다른 유형), 네임 스페이스 및 이름별로 식별됩니다. –

+0

어셈블리를 추가하는 것을 잊었습니다. 여전히 CLR은 내가 아는 한 네임 스페이스에 대해 아무것도 모릅니다. – Botz3000

+0

ECMA-335는 형식이 각 어셈블리의 범위 내에서 전체 이름으로 식별되도록 지정합니다. 이들의 전체 이름은 네임 스페이스와 이름으로 구성되는 유형의 메타 데이터로 구성되며 두 개의 개별 엔터티로 저장됩니다. 그건 전혀 모르는 것과는 조금 다릅니다. SRE의 경우 구현은 ECMA 335에서 편집 된 간단한 규칙 (마지막 점으로 분리)을 기반으로 전체 이름을 분할합니다. –