当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 利用.NET语言开发自己的脚本语言(一)

ASP.NET
asp.net DiscuzNT登录,退出的代码
ASP .NET中执行控件(如ImageButton、LinkButton等)命令不刷新页面
Microsoft SQL Server 2005 Express 远程访问设置详述,100%成功篇
使用.NET命令行编译器编译项目(如ASP.NET、C#等)
asp.net 去除viewstate
asp.net repeater实现批量删除
asp.net安全、实用、简单的大容量存储过程分页
asp.net 获取图片高度和宽度实例代码
在GridView中LinkButton的属性的应用(如何不用选中就删除这一行)
关于.net(C#)中的跨进程访问的问题
asp.net request.PathInfo实现的url重写
asp.net SqlDataReader绑定Repeater
ASP.NET 动态写入服务器端控件
Discuz .net版本中的短消息系统
asp.net动态加载用户控件,关于后台添加、修改的思考
.net Cookies安全性实践分析
配置Visual Studio 以调试.net framework源代码
asp.net 大文件上传 之 改版了的SlickUpload.HttpUploadModule(Krystalware.SlickUpload.dll)
asp.net Web站点风格切换的实现
asp.net 用户控件中图片及样式问题

ASP.NET 中的 利用.NET语言开发自己的脚本语言(一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 220 ::
收藏到网摘: n/a


要利用.NET语言(例如:c# vb.net)开发自己的脚本语言必须实现2步:1.能够动态编译.NET 源代码2.动态调用.NET组件
首先我们介绍下动态条用.NET组件1.新建1个工程作为组件接口DynamicInterface创建新的类:using System;
namespace DynamicInterface{ public interface IDynamic { string getString(); }}
2.新建1个工程作为需要动态调用的组件DynamicClass引用DynamicInterface创建新的类:using System;
namespace DynamicCls{ public class DynamicClass:DynamicInterface.IDynamic //实现接口 { public DynamicClass() { } #region IDynamic 成员
public string getString() { // TODO: 添加 DynamicClass.getString 实现 return "Hello World Huhong"; }
#endregion }
3.新建1个工程来动态调用DynamicClassusing System;using System.Reflection;
using System.Threading;
namespace dynamicreference{ class DynamicReference { /// /// 应用程序的主入口点。 /// [STAThread] static void Main(string[] args) { string dllfilename=@"C:\DynamicClass.dll"; Thread.GetDomain().AssemblyLoad+=new AssemblyLoadEventHandler(DynamicReference_AssemblyLoad); Thread.GetDomain().AssemblyResolve+=new ResolveEventHandler(DynamicReference_AssemblyResolve); Assembly asm=System.Reflection.Assembly.LoadFile(dllfilename); Type type=asm.GetType("DynamicCls.DynamicClass",true); Object oh=Activator.CreateInstance(type); MethodInfo mi = type.GetMethod("getString"); Console.WriteLine(mi.Invoke(oh,null).ToString()); //利用反射机制运行 DynamicInterface.IDynamic id=(DynamicInterface.IDynamic)oh; //利用接口运行 Console.WriteLine(id.getString()); }

private static void DynamicReference_AssemblyLoad(object sender, AssemblyLoadEventArgs args) { Console.WriteLine("加载1个组件:"+args.LoadedAssembly.FullName ); }
private static Assembly DynamicReference_AssemblyResolve(object sender, ResolveEventArgs args) { Console.WriteLine("组件解析失败!"); return null; } }}
未完待续....