من یه برنامه دارم مینویسم که توش نیاز هست یک کدی به زبان#C از یک فایل خوانده بشه و برنامه آن را اجرا کند. تا اینجا را توانستم.
CSharpCodeProvider codeProvider = new CSharpCodeProvider();
ICodeCompiler compiler = codeProvider.CreateCompiler();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
parameters.OutputAssembly = "CS-Script-Tmp-Junk";
parameters.MainClass = "CScript.Main";
parameters.IncludeDebugInformation = false;
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
{
parameters.ReferencedAssemblies.Add(asm.Location);
}
parameters.ReferencedAssemblies.Add(Directory.GetC urrentDirectory() + @"\source.dll");
CompilerResults results = compiler.CompileAssemblyFromSource(parameters, textBox1.Text);
if (results.Errors.Count > 0)
{
string errors = "Compilation failed:\n";
foreach (CompilerError err in results.Errors)
{
errors += err + "\n";
}
MessageBox.Show(errors, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
object o = results.CompiledAssembly.CreateInstance("CScript") ;
Type type = o.GetType();
MethodInfo m = type.GetMethod("Main");
m.Invoke(o, null);
if (File.Exists("CS-Script-Tmp-Junk")) { File.Delete("CS-Script-Tmp-Junk"); }
حالا سوال اینجاست که من میخوام در کدی که بصورت داینامیک باید اجرا شود، بتوان به آبجکت های برنامه دسترسی داشت، مثلا بتوان متن یک لیبل را عوض کرد.
کسی میدونه چه جوری؟