2014-06-18 3 views
1

System.Reflection.Emit.AssemblyBuilder를 만들면이를 유지 (AssemblyBuilderAccess.Save 등으로 초기화)하거나 일시적으로 (AssemblyBuilderAccess.Run 등으로) 유지할 수 있습니다. 입력으로 가지고있는 어셈블리 빌더 용 ModuleBuilder를 생성 할 것입니다. 하지만 임시 어셈블리를 위해 지속 모듈을 만들 수 없으므로 모듈 작성 전에 어셈블리 상태를 확인해야합니다. 어떻게해야합니까?.NET 동적 어셈블리가 일시적인지 영구적인지 확인

public ModuleBuilder Handle(AssemblyBuilder assembly, string name) 
{ 
    if (assembly.IsPersisted) // IsPersisted is a kind of property I'm looking for 
    { 
     return assembly.DefineDynamicModule(name, name + ".dll"); 
    } 
    else 
    { 
     return assembly.DefineDynamicModule(name); 
    } 
} 

난 반사를 사용하여 내부 필드에 액세스하여 조립 상태를 얻을 수있다, 그래서 이것은 내가 찾고 있어요 답변되지 않습니다 : 코드 조각입니다.

+2

그냥 추측하지만 assembly.CodeBase는 무엇을 제공합니까? IIRC 그것은 디스크에 exe 또는 dll 파일의 경로입니다. 그것은 지속되지 않는 경우 단서를 줄 수 있습니다. –

+0

어셈블리와 모듈을 개별적으로 만드는 이유는 무엇입니까? 거의 항상 각 어셈블리에 정확히 하나의 모듈이 있어야합니다. – svick

+0

rim의 @imim : 흥미로운 아이디어이지만, 두 경우 모두 NotSupportedException이 발생합니다. – Stan

답변

0

그냥이 정확한 상황 발생 - 어셈블리는 또한 지속 할 것인지 여부를 말하는 상태 변수를 전달하지 않고 당신이 처리 할 수있는 유일한 방법입니다 :

try 
{ 
    return assembly.DefineDynamicModule(name, name + ".dll"); 
} 
catch(NotSupportedException) 
{ 
    return assembly.DefineDynamicModule(name); 
} 

하지 꽤 -하지만 진짜가 없습니다 대안.

관련 문제