#region 程序集1 無參數、靜態類下的靜態方法
static void CodeAssembly_1()
{
//提供對 C# 代碼生成器和代碼編譯器的實例的訪問。
CSharpCodeProvider provider = new CSharpCodeProvider();
//表示用於調用編譯器的參數
CompilerParameters parameter = new CompilerParameters();
//獲取當前項目所引用的程序集。
parameter.ReferencedAssemblies.Add("System.dll");
//獲取或設置一個值,該值指示是否生成可執行文件。
parameter.GenerateExecutable = false;
//獲取或設置一個值,該值指示是否在內存中生成輸出。
parameter.GenerateInMemory = true;
//使用指定的編譯器設置,從包含源代碼的字符串的指定數組,編譯程序集。返回編譯結果。
CompilerResults result = provider.CompileAssemblyFromSource(parameter,
GetCode_1("120/12"));//將你的式子放在這裡
//獲取編譯器錯誤和警告的集合
if (result.Errors.Count > 0)
{
Console.WriteLine("動態編譯出錯了!");
}
else
{
//獲取或設置已編譯的程序集。
Assembly assembly = result.CompiledAssembly;
//獲取當前實例的 Type
Type AType = assembly.GetType("NameSpace_1.Class_1");
//獲取類型的方法
MethodInfo method = AType.GetMethod("Func");
//調用方法
Console.WriteLine(method.Invoke(null, null));
}
Console.Read();
}
//獲取代碼
private static string GetCode_1(string para)
{
StringBuilder codes = new StringBuilder();
//引用
codes.Append("using System; ");
//命名空間定義
codes.Append("namespace NameSpace_1");
codes.Append("{");
//類定義
codes.Append(" public class Class_1");
codes.Append(" {");
//方法定義
codes.Append(" public static object Func()");
codes.Append(" {");
codes.Append(" return (" + para + ");");
codes.Append(" }");
codes.Append(" }");
codes.Append("}");
return (codes.ToString());
}
#endregion
#region 程序集2 含構造函數類需要生成實例對象後調用還參數方法
static void CodeAssembly_2()
{
//提供對 C# 代碼生成器和代碼編譯器的實例的訪問。
CSharpCodeProvider provider = new CSharpCodeProvider();
//表示用於調用編譯器的參數
CompilerParameters parameter = new CompilerParameters();
//獲取當前項目所引用的程序集。
parameter.ReferencedAssemblies.Add("System.dll");
//獲取或設置一個值,該值指示是否生成可執行文件。
parameter.GenerateExecutable = false;
//獲取或設置一個值,該值指示是否在內存中生成輸出。
parameter.GenerateInMemory = true;
//使用指定的編譯器設置,從包含源代碼的字符串的指定數組,編譯程序集。返回編譯結果。
CompilerResults result = provider.CompileAssemblyFromSource(parameter, GetCode_2());
//獲取編譯器錯誤和警告的集合
&nb