日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类

發布時間:2025/3/20 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Eval.cs的改進版 動態編譯類,可以計算表達式,也可以調用系統中的類

/*

動態編譯類,可以計算表達式,也可以調用系統中的類

調用方式: ????return new XXXXXXX.Eval().GetValue("System.DateTime.Now")

返回結果:???? 2005-08-04 15:00:24

*/
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.IO;

namespace XXXXXXX
{
?/*****************************************************************
?** 文件名:?????? Eval.cs
?** Copyright (c) 1999 -2003
?** 創建人:?????? Phoenix
?** 創建日期:
?** 修改人:?? BigmouthZ@163.net
?** 修改日期: 2005/08/04
?** 描 述:???????? 獲取字符串所表示的邏輯意義
?** 版 本:1.0
?******************************************************************/
?public class Eval
?{
??public object GetValue( string value )
??{
???string codeSnippet =
@"
using System;
using System.Collections;
using DBCore;
namespace CzG
{
?public class $0$
?{
??public $0$(){}
??public object GetValue()
??{
???return $1$ ;
??}
?}
}";
???string tmp = "Eval" + Convert.ToString(System.DateTime.Now.Ticks);
???codeSnippet = codeSnippet.Replace("$0$",tmp);
???codeSnippet = codeSnippet.Replace("$1$",value);
???object b = "";
???try
???{
????ICodeCompiler compiler =? new CSharpCodeProvider().CreateCompiler();
????CompilerParameters para = new CompilerParameters();
????para.ReferencedAssemblies.Add( "System.dll" );
????string path = System.Environment.CurrentDirectory;
para.ReferencedAssemblies.Add( path + @"\DBCore.dll" );
????para.GenerateInMemory = true;
????para.GenerateExecutable = false;
????para.OutputAssembly = path + "\\" + tmp + ".dll";

????CompilerResults cr = compiler.CompileAssemblyFromSource(para, codeSnippet);
????Assembly asm = cr.CompiledAssembly;
??
????object obj = asm.CreateInstance( "CzG." + tmp );
????Type type = asm.GetType( "CzG." + tmp );
????MethodInfo mi = type.GetMethod("GetValue");?
?? ?
????b =? mi.Invoke( obj , null );
????GC.Collect();
????System.IO.File.Delete( path + "\\" + tmp + ".dll");
???}
???catch
???{
????b = "CallError!";
???}

???return b;
??}
?}
}


轉載于:https://www.cnblogs.com/bigmouthz/archive/2006/01/24/322546.html

總結

以上是生活随笔為你收集整理的Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。