C# 从抛出的异常获取特定信息 让我们考虑在代码中有一个异常EX。现在在catch body中,我想获得六条信息: 解决方案名称 项目名称 名称空间名称 文件名 方法名 行号
我已经知道的是使用C# 从抛出的异常获取特定信息 让我们考虑在代码中有一个异常EX。现在在catch body中,我想获得六条信息: 解决方案名称 项目名称 名称空间名称 文件名 方法名 行号,c#,.net,exception,stack-trace,system.diagnostics,C#,.net,Exception,Stack Trace,System.diagnostics,我已经知道的是使用 System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(e, true); 我可以访问其中一些信息(文件的完整路径、行号等)。但这些信息并不是我所需要的全部。例如,我不知道如何从跟踪中提取解决方案名称或命名空间名称。显然,解析文件路径也不是一个选项,因为不同的错误可能有多个文件和文件夹层次结构层,并且一个全局规则并不适用于所有错误 我想知道有没有办法通过编程方式访问这些信息 非常感谢。很
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(e, true);
我可以访问其中一些信息(文件的完整路径、行号等)。但这些信息并不是我所需要的全部。例如,我不知道如何从跟踪中提取解决方案名称或命名空间名称。显然,解析文件路径也不是一个选项,因为不同的错误可能有多个文件和文件夹层次结构层,并且一个全局规则并不适用于所有错误
我想知道有没有办法通过编程方式访问这些信息
非常感谢。很可能你不会得到完全符合你要求的东西,但我将与你分享一些你可能不知道或没有考虑过的工具和想法:
很可能你不会得到完全符合你要求的东西,但我将分享一些你可能不知道或不考虑的工具和想法:
像“解决方案”和“项目”这样的概念只适用于编译时(甚至特定于VisualStudio——编译器不需要以这种方式对代码进行分区)。它们不会反映在二进制文件或调试符号中,因此对运行时不可用。您可以使用属性和/或生成的代码将它们显式嵌入程序集中,但仍必须处理它们不可用的情况。命名空间虽然在堆栈框架中不立即可用,但可以从nam中确定方法所处类型的e(
.GetMethod().ReflectedType.Namespace
)。例如ToString()是您将从中获得的最大信息量。正如@Jeroenmoster所说,解决方案和项目是编译器唯一的东西。甚至是Visual Studio唯一的东西。然而,这也应该是很明显的,因为命名空间/函数名在堆栈跟踪中,您应该知道哪个程序会抛出异常,然后才能删除g it.我经常链接两篇关于异常处理的文章,这两篇文章可能会帮助您了解该怎么做:|您想知道您列出的关于异常最初抛出点的信息,还是关于异常被捕获点的信息?我想从异常发生点获取信息像“解决方案”和“项目”这样的东西都是只在编译时使用的概念(甚至特定于VisualStudio——编译器不需要以这种方式对代码进行分区)。它们不会反映在二进制文件或调试符号中,因此对运行时不可用。您可以使用属性和/或生成的代码将它们显式嵌入程序集中,但仍必须处理它们不可用的情况。命名空间虽然在堆栈框架中不立即可用,但可以从nam中确定方法所处的类型(.GetMethod().ReflectedType.Namespace
)。例如,ToString()是从中获得的最大信息量。正如@JeroenMostert所说,解决方案和项目只是编译器的一部分,甚至是可视化研究