Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类
2006-01-24 11:44
281 查看
Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类
document.title="Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类 - "+document.title
/*
动态编译类,可以计算表达式,也可以调用系统中的类
调用方式: 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;
}
}
}
document.title="Eval.cs的改进版 动态编译类,可以计算表达式,也可以调用系统中的类 - "+document.title
/*
动态编译类,可以计算表达式,也可以调用系统中的类
调用方式: 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;
}
}
}
相关文章推荐
- 自己封装了一个导航条,可以调用系统的侧滑返回
- 调用系统的相册、相机、闪光灯,可以选择相册的照片
- C# 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。这个错误是什么原因引起的?
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值 "解决方案
- Asp.Net异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值"的解决方法
- UDP socket也可以使用connect系统调用
- C#调用js Eval,高效率,可以增加函数。
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值”的解决方法
- 异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- “由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。”
- 解决 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- C语言简单计算器(基于栈和逆波兰表达式)这几天忙着开学的事宜,一直没时间刷提,就把今天刚做好的课程设计——简易计算器贴在这给大家参考!(计算小数时要用0减正数并用括号括起来,这一点不足以后再改进)
- Asp.Net异常:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值"的解决方法
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。
- c# webservice异步调用wcf 异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- 异常:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- bs系统调用cs应用(Js调用exe程序方法)
- java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
- 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- ASP.NET中一般处理程序报的错误:由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值