一尘不染

编译并运行动态代码,而不生成EXE?

c#

我想知道是否有可能在不生成exe或任何其他类型的文件的情况下编译和运行存储的代码,基本上是从内存运行该文件。

基本上,Main应用程序将存储一些代码(可能会更改的代码),并且需要编译该代码并执行它。不创建任何文件。

创建文件,运行程序,然后删除文件不是一种选择。编译后的代码将需要从内存中运行。

代码示例,指针或几乎任何东西都欢迎:)


阅读 297

收藏
2020-05-19

共1个答案

一尘不染

using (Microsoft.CSharp.CSharpCodeProvider foo = 
           new Microsoft.CSharp.CSharpCodeProvider())
{
    var res = foo.CompileAssemblyFromSource(
        new System.CodeDom.Compiler.CompilerParameters() 
        {  
            GenerateInMemory = true 
        }, 
        "public class FooClass { public string Execute() { return \"output!\";}}"
    );

    var type = res.CompiledAssembly.GetType("FooClass");

    var obj = Activator.CreateInstance(type);

    var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
}

这将从包含的源代码字符串中编译一个简单的类,然后实例化该类并在其上反射性地调用一个函数。

2020-05-19