بچه ها کسی میدونه چطوری میشه یه متغییر از نوع رشته که داخلش کد ذخیره شده با c# اجرا کرد؟
Printable View
بچه ها کسی میدونه چطوری میشه یه متغییر از نوع رشته که داخلش کد ذخیره شده با c# اجرا کرد؟
سلام.
قبلاً یه همچین تابعی رو نوشتم، شما باید از دستورات در حال اجرا در سی شارپ استفاده کنید.
کد زیر یک کلاس رو از داخل متن در میاره و تابعش رو اجرا میکنه
کد:using Microsoft.CSharp;
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string source = "using System; public class Test { public void Run(){ Console.WriteLine(\"Run Called\"); } }";
var asm = CompileSource(source, new List<Type>() { typeof(Console) });
var test = Activator.CreateInstance(asm.GetType("Test"));
test.GetType().GetMethod("Run").Invoke(test, null);
Console.ReadKey();
}
private static Assembly CompileSource(string sourceCode, List<Type> types)
{
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
parameters.GenerateExecutable = false;
List<string> assemblies = new List<string>();
foreach (var item in types)
{
if (!assemblies.Contains(item.Assembly.Location))
assemblies.Add(item.Assembly.Location);
}
foreach (var asm in assemblies)
{
parameters.ReferencedAssemblies.Add(asm);
}
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceCode);
if (!results.Errors.HasErrors)
{
Console.WriteLine("compile ok");
return results.CompiledAssembly;
}
else
{
Console.WriteLine("compile error");
return null;
}
}
}
}