コードとしてコンパイルするために動的に作成された文字列を作成することができました.MessageBox.Showのような基本的なことをしたり、整数や文字列などを作成したりします.それは?私はネットから見つけたコードを使用して開始しました。
string lcCode = this.memoEdit1.Text;
lcCode = @"
using System;
using System.IO;
using System.Windows.Forms;
namespace MyNamespace {
public class MyClass {
public object DynamicCode(params object[] Parameters) {
" + lcCode +
"return (object) DateTime.Now;"+
"} } }";
ICodeCompiler loCompiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters loParameters = new CompilerParameters();
// ref assmbles lazım ekle,mssql vs.
loParameters.ReferencedAssemblies.Add("System.dll");
loParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
loParameters.GenerateInMemory = true;
// yuru
CompilerResults loCompiled = loCompiler.CompileAssemblyFromSource(loParameters, lcCode);
#region errör
if (loCompiled.Errors.HasErrors)
{
string lcErrorMsg = "";
// erörrler
lcErrorMsg = loCompiled.Errors.Count.ToString() + " Errors:";
for (int x = 0; x < loCompiled.Errors.Count; x++)
lcErrorMsg = lcErrorMsg + "\r\nLine: " + loCompiled.Errors[x].Line.ToString() + " - " +
loCompiled.Errors[x].ErrorText;
MessageBox.Show(lcErrorMsg + "\r\n\r\n" + lcCode, "Erörrz", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
# endregion
//this.memoEdit1.Text = lcCode;
Assembly loAssembly = loCompiled.CompiledAssembly;
// Object dinamik !!!!1!1 o yüzden obje kalsın!
object loObject = loAssembly.CreateInstance("MyNamespace.MyClass");
if (loObject == null)
{
MessageBox.Show("Class error");
return;
}
object[] loCodeParms = new object[1];
loCodeParms[0] = "Test";
try
{
object loResult = loObject.GetType().InvokeMember("DynamicCode",BindingFlags.InvokeMethod, null, loObject, loCodeParms);
//MessageBox.Show("Method Call Result:\r\n\r\n" + loResult.ToString(), "Sonuç", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception loError)
{
MessageBox.Show(loError.Message, "Erörrz", MessageBoxButtons.OK, MessageBoxIcon.Information);
}