我想知道是否有可能在不生成exe或任何其他类型的文件的情况下编译和运行存储的代码,基本上是从内存运行该文件。
基本上,Main应用程序将存储一些代码(可能会更改的代码),并且需要编译该代码并执行它。不创建任何文件。
创建文件,运行程序,然后删除文件不是一种选择。编译后的代码将需要从内存中运行。
代码示例,指针或几乎任何东西都欢迎:)
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[] { }); }
这将从包含的源代码字符串中编译一个简单的类,然后实例化该类并在其上反射性地调用一个函数。