ExceptionHandler in .NET



祝大家美好的一天!

我使用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

相关内容

  • 没有找到相关文章

最新更新