祝大家美好的一天!
我使用Mono.Cecil复制了一个方法,并遇到了以下问题:
我的复制功能很简单(例如(:
public static bool Ping()
{
MessageBox.Show("Ping");
try
{
MessageBox.Show("status");
}
catch (Exception exception)
{
MessageBox.Show("Exception ");
return false;
}
return true;
}
这是工作不是问题。但如果我这样做:
MessageBox.Show("Exception " + exception.Message);
我遇到了麻烦:当执行到达函数调用时,它会生成"未处理的异常"并且 clr 完成工作。我什至看不到MessageBox.Show("Ping")
!
我复制尝试/捕获块,以便:
foreach (ExceptionHandler exh in SourceMethod.Body.ExceptionHandlers)
{
var ex = new ExceptionHandler(exh.HandlerType)
{
TryStart = exh.TryStart,
TryEnd = exh.TryEnd,
HandlerStart = exh.TryEnd,
HandlerEnd = exh.HandlerEnd,
CatchType = Assembly.MainModule.Import(typeof(Exception)),
HandlerType = exh.HandlerType,
FilterStart = exh.FilterStart
};
target.Body.ExceptionHandlers.Add(ex);
}
我认为我的问题就在这里:
CatchType = Assembly.MainModule.Import(typeof(Exception)),
但我不知道如何正确地做到这一点
我试过了:
CatchType = exh.CatchType
但很不幸。
如何解决这种情况?有什么想法吗?
很可能您正在生成无效的 IL,并且运行时正在检测到它,甚至没有开始运行您的程序(因此您看不到ping(。
您可以通过运行以下命令来检查(至少在 Windows 上(:
验证到程序集的路径
话虽如此,您可以在此处看到一个完整的示例:https://cecilifier.me/?gistid=fd87051cdca0860916a171c419a30f80