在运行时编译程序集并将dll保存在文件夹中

dau*_*san 1 c# runtime compilation .net-assembly

这是我的代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

如何将创建的dll保存到我自己的特定文件夹中?当我调试时,不知何故,程序集位置位于'AppData/Local/Temp /'文件夹中.

Iro*_*eek 5

您可以使用OutputAssembly属性CompilerParameters来设置输出程序集的名称(路径).从你的例子:

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

compilerparams.OutputAssembly = "OutputAssembly.dll";

CompilerResults results = compiler.CompileAssemblyFromSource(compilerparams, code);
...
Run Code Online (Sandbox Code Playgroud)