c# - 编译运行动态代码,不生成EXE?

标签 c# runtime-compilation

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

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

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

代码示例、指针或几乎任何东西都是受欢迎的:)

最佳答案

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[] { });
}

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

关于c# - 编译运行动态代码,不生成EXE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3188882/

相关文章:

c# - 是什么使Entity Framework/Upshot相信我的对象图“包含周期”?

c# - 是否收集了 MakeGenericType/泛型类型的垃圾?

java - 加载外部源代码并在内部使用它们(通过重新编译或其他方式)

c - 在 spoj toandfro classic 中获取 C 运行时错误

c# - Unity3D 中 WebCamTexture 的色度键着色器

c# - 使用 LINQ 从使用 C# 的 HTML 中提取所有隐藏的输入

c# - 我们在以下代码中使用 "using statement"的原因是什么?

c# - 为什么每次调用该方法时 Compile() 都不运行?

c# - CSharpCodeProvider.CompileAssemblyFromFile 中的最大错误数

java - java.math.BigDecimal 的运行时和编译时的构造函数数量不匹配