.NET(C#):Emit创建异常处理的方法
//+ using System.Reflection;
//+ using System.Reflection.Emit;
static void Main(string[] args)
{
var dm = GetMethod();
dm.Invoke(null, new object[] { new Exception("来自Mgen!") });
}
static DynamicMethod GetMethod()
{
var dm = new DynamicMethod("", null, new Type[] { typeof(Exception) });
var ilgen = dm.GetILGenerator();
//try {
ilgen.BeginExceptionBlock();
//加载第一个参数,并throw
ilgen.Emit(OpCodes.Ldarg_0);
ilgen.Emit(OpCodes.Throw);
ilgen.BeginCatchBlock(typeof(Exception));
//临时变量 和 需要的反射信息
var exp = ilgen.DeclareLocal(typeof(Exception));
var msg = typeof(Exception).GetProperty("Message").GetGetMethod();
var output = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string), typeof(object) });
//保存异常对象到临时变量exp
ilgen.Emit(OpCodes.Stloc, exp);
//格式字符串进栈
ilgen.Emit(OpCodes.Ldstr, "错误信息: {0}");
//加载临时变量
ilgen.Emit(OpCodes.Ldloc, exp);
//获取Message属性
ilgen.Emit(OpCodes.Callvirt, msg);
//调用有格式字符串的Console.WriteLine
ilgen.Emit(OpCodes.Call, output);
//结束整个处理块
ilgen.EndExceptionBlock();
ilgen.Emit(OpCodes.Ret);
return dm;
}
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- C# B/S程序中出现“异常详细信息: System.Data.SqlClient.SqlException: 用户 'XXX/ASPNET' 登录失败。”的处理方法
- asp.net C#动态添加创建生成button按钮控件没有触发执行响应click绑定事件处理
- asp.net捕获全局未处理异常的几种方法
- C#异常处理经验(原则与方法)
- NET 2.0(C#)调用ffmpeg处理视频的方法
- c#.net常见字符串处理方法
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- [ASP.NET学习笔记之二十六]C#的异常处理
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- NET 2.0(C#)调用ffmpeg处理视频的方法
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- ASP.NET Export to Excel(导出数据到Excel) & C#导出Excel,某单元格内容长度超过255的处理方法
- C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法
- 在c#中利用keep-alive处理socket网络异常断开的方法
- c# .net 我的Application_Error 全局异常抓取处理
- [原创]C#中使用ADO.NET连接SQL Server数据库,自动增长字段用作主键,处理事务时的基本方法
- ASP.NET生成eurl.axd Http异常错误处理方法【转】
- NET 2.0(C#)调用ffmpeg处理视频的方法