2016-10-15 2 views
0

에 나는이 같은 런타임에서 조립을 만들려면 :Reflection.Emit을 사용하여 어셈블리 런타임을 만듭니다. mvc5

AssemblyName an = new AssemblyName("ImanAssembly"); 
AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save); 
ModuleBuilder mb = ab.DefineDynamicModule(an.Name, an.Name + ".exe"); 
TypeBuilder tb = mb.DefineType("Product", TypeAttributes.Public); 
FieldBuilder fb = tb.DefineField("ProName", typeof(string), FieldAttributes.Public); 
Type t = tb.CreateType(); 
ab.Save(an.Name + ".exe"); 

을하지만 난 내 코드의 마지막 줄에서이 오류를 얻을 : 유형의

예외를 ' System.IO.IOException 'mscorlib.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다.

추가 정보 : 액세스가 거부되었습니다. (HRESULT에서 예외 : 0x80070005입니다 (E_ACCESSDENIED))

업데이트 : 내가 관리자로 실행 VS 의한 해결 ...하지만 왜 내가 bin 폴더 내 생성 된 어셈블리를 찾을 수 없습니다 ???? 내가 어디에서 찾을 수 있니?

+0

VS를 관리자로 실행하십시오. –

+0

감사합니다 @PowerStar 작동하지만 ... 나는 빈 폴더에 내 어셈블리를 볼 수 없어 ... 내가 어디에서 찾을 수 있습니까? –

+0

나는이 질문에 답했다. 그것이 도움이 될 수 있습니다 확인하십시오. –

답변

1

액세스가 거부 된 문제를 해결하려면 VS를 관리자로 실행해야합니다.

아래 라인은 어셈블리를 저장할 디렉토리 경로를 결정합니다.

AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save); 

이 경우 디렉토리를 세 번째 매개 변수로 지정할 수 있습니다. 지정하지 않으면 현재 디렉토리로 간주됩니다. 당신이 빈 폴더 다음에 저장 선 아래 사용하려면 \ Program 파일 (x 86) \ IIS 익스프레스

:

그래서 지금 당신은 C에서 exe 파일을 찾을 수 있습니다.

AssemblyBuilder ab = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Save, Server.MapPath("~/bin")); 
+0

감사합니다 ... 나는 Reflect.Eit로 EntityFramwork CodeFirst의 내 엔티티 모델로 reflection.emit 클래스를 만들고 싶습니다. 어느 것이 Reflection.Emit 및 CodeDOM 중 하나가보기에이 작업을 수행하는 것이 더 낫지가 ?? ?? @Power Star –