从文本文件中读入一段可执行的源代码,如何插入到已有的C#程序中,让它执行???!

huawdai 2002-07-20 07:53:04
在php中有一个eval($str)函数,能够完成这样的功能。
eval($str)不会把$str当作字符串,而是当作一段可执行的php程序!

可是,c#中如何实现eval()的功能呢?

谢谢,急用!
...全文
119 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
superkiller 2002-07-22
祝贺
  • 打赏
  • 举报
回复
huawdai 2002-07-21
ZengXi(var Mm: TObject)

xml可以吗?能够说具体一点吗?
  • 打赏
  • 举报
回复
希偌 2002-07-21
这里有个将字符串转换为对象的方法,不知道是否有用?
public object ConvertFromString(string);
  • 打赏
  • 举报
回复
ZengXi 2002-07-21
有没有宏定义啊,像c那样,
或者用xml可以
  • 打赏
  • 举报
回复
huawdai 2002-07-21
大家帮帮忙啊,摆脱了,急用呢!!
  • 打赏
  • 举报
回复
monkey_zeng 2002-07-21
有意思!!!
关注!!!
  • 打赏
  • 举报
回复
daehappy 2002-07-21
up!gz!
  • 打赏
  • 举报
回复
huawdai 2002-07-21
哈哈,让我发现了!

我可以使用Server.Execute(path)的方法来达到这样的目的!
  • 打赏
  • 举报
回复
longj 2002-07-21
////////////////////////////////////////
////Coding当歌需纵酒,蜀山深处有人家////
////////////////////////////////////////



c#中我还没有发现eval或类似函数,不过Jscript.NET中有,例如

<%@ Page Language="Jscript" Debug="true" %>
<%@ Import Namespace="System" %>
<%
Response.Write("aaa");
eval("Response.Write(\"bbbb\")");
%>

  • 打赏
  • 举报
回复
huawdai 2002-07-21
换一个签名:)
================================================================

做程序员真是辛苦啊
:(
  • 打赏
  • 举报
回复
huawdai 2002-07-21
longj(龙九):
你的程序是很好,不过好像和动态链接库的作用有一点像,是不是只能应用于桌面程序中呢?
如果是网页的编程,也可以吗?

比如:
我定义了字符串:
string strTest1 = "<% Response.Write(\"asdfasdf\") %>";
string strTest2 = "<% for ( int i = 0; i < 10; i++ ) { Response.write ( i ); } %>"
当然,这两个字符串中都是代码,我希望C#能够把它们看成代码,而不要看成是字符串。

但是,这样的html代码总是达不到目的:
<html>
strTest1//在ie中显示strTest1
<%strTest1%>//会出错
<%=strTest1%>//ie中什么都不显示,但是在html源代码对应的地方可以看到<% Response.Write("asdfasdf") %>原封不动放在那里
</html>

要怎么做,才能让strTest1中的代码执行呢?
================================================================

CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!

★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。

★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。

Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]

  • 打赏
  • 举报
回复
longj 2002-07-20
这个例子:
compiler.cs读取编译并执行hello.cs (把2个文件放在同一个目录下面)
你可以先 csc compiler.cs 再 compiler.exe

当然如果把hello.cs改名成hello.txt,compiler.cs中也要做相应改动

/////////Compiler.cs
using System;
using System.Reflection;
using System.CodeDom.Compiler;

namespace myTest
{
class myComplier
{
public static void Main(string[] args)
{
Microsoft.CSharp.CSharpCodeProvider csharp = new Microsoft.CSharp.CSharpCodeProvider();
ICodeCompiler cscompiler = csharp.CreateCompiler();
CompilerParameters compparams = new CompilerParameters(new string[]{"mscorlib.dll"});
compparams.GenerateInMemory=true;
CompilerResults compresult = cscompiler.CompileAssemblyFromFile( compparams ,"Hello.cs");

if ( compresult == null || compresult.Errors.Count > 0 )
Environment.Exit(1);
object o = compresult.CompiledAssembly.CreateInstance("myHello.Hello");
Type test = compresult.CompiledAssembly.GetType("myHello.Hello");
MethodInfo m = test.GetMethod("SayHello");
object[] arg=new object[1];
arg[0]=" Hello World!";
m.Invoke(o, arg);
}
}
}


/////Hello.cs
using System;
namespace myHello
{
class Hello {
public void SayHello(string s)
{
Console.WriteLine( s + " in SayHello");
}
}
}
  • 打赏
  • 举报
回复
longj 2002-07-20
这个例子:
compiler.cs读取编译并执行hello.cs (把2个文件放在同一个目录下面)
你可以先 csc compiler.cs 再 compiler.exe

当然如果把hello.cs改名成hello.txt,compiler.cs中也要做相应改动

/////////Compiler.cs
using System;
using System.Reflection;
using System.CodeDom.Compiler;

namespace myTest
{
class myComplier
{
public static void Main(string[] args)
{
Microsoft.CSharp.CSharpCodeProvider csharp = new Microsoft.CSharp.CSharpCodeProvider();
ICodeCompiler cscompiler = csharp.CreateCompiler();
CompilerParameters compparams = new CompilerParameters(new string[]{"mscorlib.dll"});
compparams.GenerateInMemory=true;
CompilerResults compresult = cscompiler.CompileAssemblyFromFile( compparams ,"Hello.cs");

if ( compresult == null || compresult.Errors.Count > 0 )
Environment.Exit(1);
object o = compresult.CompiledAssembly.CreateInstance("myHello.Hello");
Type test = compresult.CompiledAssembly.GetType("myHello.Hello");
MethodInfo m = test.GetMethod("SayHello");
object[] arg=new object[1];
arg[0]=" Hello World!";
m.Invoke(o, arg);
}
}
}


/////Hello.cs
using System;
namespace myHello
{
class Hello {
public void SayHello(string s)
{
Console.WriteLine( s + " in SayHello");
}
}
}
  • 打赏
  • 举报
回复
dgcoo 2002-07-20
读取文件
然后分析文件
最后,家道你的程序里?
  • 打赏
  • 举报
回复
huawdai 2002-07-20
没有人知道吗?
  • 打赏
  • 举报
回复
发帖
.NET社区
加入

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
帖子事件
创建了帖子
2002-07-20 07:53
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。