如何在 C# 中获取反射程序集的异常 StackTrace
How to get exception StackTrace for reflected assemblies in c#
我有一个简单的 c# .net windows 服务,它在 运行 时间加载程序集并在其中执行一个方法。如果出现错误,我会向自己发送一封电子邮件,其中包含堆栈跟踪。问题是堆栈跟踪只给我程序的堆栈,而不是反射程序集的堆栈。有没有办法得到它。这是代码
try
{
var filename = "abc.dll";
var assemblyToLoad = Assembly.LoadFile(filename);
var args = new object[]
{
"FirstName","LastName"
};
var classToLoad = assemblyToLoad.CreateInstance("abc.myclass", false,
BindingFlags.CreateInstance, null, args, null, null);
var value = classToLoad.GetType().GetMethod("Run").Invoke(classToLoad, null);
}
catch(Exception ex)
{
SendMail(ex.StackTrace);
}
您似乎在尝试重新发明轮子,既然您可以实现一个众所周知的强大框架,为什么还要使用这种基本的日志记录方式?
我可以建议您看一下 Elmah 它是我使用过的最简单的日志记录框架之一。
感谢 dartonw。他的建议奏效了。我觉得我好笨。我只需要将反射程序集的 .pdb 文件放到 bin 文件夹中,然后查看 innerException 的堆栈跟踪以获取反射程序集的堆栈跟踪。
我有一个简单的 c# .net windows 服务,它在 运行 时间加载程序集并在其中执行一个方法。如果出现错误,我会向自己发送一封电子邮件,其中包含堆栈跟踪。问题是堆栈跟踪只给我程序的堆栈,而不是反射程序集的堆栈。有没有办法得到它。这是代码
try
{
var filename = "abc.dll";
var assemblyToLoad = Assembly.LoadFile(filename);
var args = new object[]
{
"FirstName","LastName"
};
var classToLoad = assemblyToLoad.CreateInstance("abc.myclass", false,
BindingFlags.CreateInstance, null, args, null, null);
var value = classToLoad.GetType().GetMethod("Run").Invoke(classToLoad, null);
}
catch(Exception ex)
{
SendMail(ex.StackTrace);
}
您似乎在尝试重新发明轮子,既然您可以实现一个众所周知的强大框架,为什么还要使用这种基本的日志记录方式?
我可以建议您看一下 Elmah 它是我使用过的最简单的日志记录框架之一。
感谢 dartonw。他的建议奏效了。我觉得我好笨。我只需要将反射程序集的 .pdb 文件放到 bin 文件夹中,然后查看 innerException 的堆栈跟踪以获取反射程序集的堆栈跟踪。