2014-01-09 1 views
1

폴더에 DLL을 저장 : 나는 내 자신의 특정 폴더에 생성 된 DLL을 저장하려면 어떻게컴파일 런타임에서 조립이 내 코드입니다

Microsoft.CSharp.CSharpCodeProvider provider = new CSharpCodeProvider(); 
ICodeCompiler compiler = provider.CreateCompiler(); 
CompilerParameters compilerparams = new CompilerParameters(); 
compilerparams.GenerateInMemory = false; 
CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code); 

if (results.Errors.HasErrors) 
{ 
    StringBuilder errors = new StringBuilder("Compiler Errors :\r\n"); 
    foreach (CompilerError error in results.Errors) 
    { 
     errors.AppendFormat("Line {0},{1}\t: {2}\n", 
       error.Line, error.Column, error.ErrorText); 
    } 
    throw new Exception(errors.ToString()); 
} 
else 
{ 
    return results.CompiledAssembly; 
} 

? 디버깅 할 때, 어떻게 든 어셈블리 위치는 'AppData/Local/Temp /'폴더에 있습니다.

답변

5

출력 어셈블리의 이름 (경로)을 설정하려면 이라는 OutputAssembly 속성을 사용할 수 있습니다. 귀하의 예제에서 : 당신은 그냥 어셈블리 이름을 지정할 수 있습니다 OutputAssembly 속성으로

... 
CompilerParameters compilerparams = new CompilerParameters(); 
compilerparams.GenerateInMemory = false; 

compilerparams.OutputAssembly = "OutputAssembly.dll"; 

CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code); 
... 
+0

나는 여전히 'AppData/Local/Temp /'에 있지만이 대답을 수락 할 것입니다. – dausdashsan

+1

@dausdashsan 이상합니다. 나는 코드를 테스트했고, 'OutputAssembly' 속성이 가리키는 곳에 어셈블리를 두었습니다. 어셈블리가'AppData/Local/Temp /'에있는 유일한 방법은 빈/널 문자열이'OutputAssembly' 속성에 전달 될 때입니다. – IronGeek

1

. 어셈블리는 현재 디렉토리에 만들어집니다. 당신이이 방법으로 컴파일러 옵션 문자열을 설정해야하는 전체 경로를 지정해야하는 경우 은 :

System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters(); 
parameters.GenerateExecutable = false; 
parameters.CompilerOptions = " /out:C:\\Temp\\" + outputAssemblyFile; 

here을, 많은 옵션이 속성에 설정할 수 있습니다. CompilerOptions를 설정하면 OutputAssembly 속성이 무시됩니다.

도움이되기를 바랍니다.