c#命令行没有错误行号

时间:2017-03-29 09:30:14

标签: c# .net command-line exception-handling

如果.NET代码中存在异常并且PDB文件可用,则通常会在异常消息中显示源代码行号的错误。这在命令行可执行文件中似乎有所不同,虽然PDB文件可用,但我没有获得任何行号:

Anwendung: MNX.CommandLine.EpkFtpEventhandler.exe Frameworkversion: v4.0.30319 Beschreibung: Der Prozess wurde aufgrund eines Ausnahmefehlers beendet. Ausnahmeinformationen: System.Data.SqlClient.SqlException Stapel: bei System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(System.String, Boolean, Int32, Boolean) bei System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(System.Threading.Tasks.TaskCompletionSource`1, System.String, Boolean, Int32, Boolean) bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery() bei MNX.DB.WriteLocal(System.String) bei MNX.DB.Write(System.String) bei MNX.CommandLine.EpkFtpEventHandler.Main(System.String[])

有谁知道为什么?

3 个答案:

答案 0 :(得分:0)

尝试通过访问Debug > Options > Debugging > Symbols来清空符号缓存,然后清理解决方案。

Empty symbol cache

答案 1 :(得分:0)

使用Stack Frames并使用try catch包围代码:

try
{
     throw new Exception();
}
catch (Exception ex)
{
    // Get stack trace for the exception with source file information
    var st = new StackTrace(ex, true);
    // Get the top stack frame
    var frame = st.GetFrame(0);
    // Get the line number from the stack frame
    var line = frame.GetFileLineNumber();
    // Print the line number
    Console.WriteLine($"An Error ({ex.Message}) occurred in line {line}");
}

为了避免剽窃:我从this question得到了这个想法。

我不知道为什么它通常不会显示在你的控制台应用程序中,但是这也应该这样做。

答案 2 :(得分:0)

Exception.StackTrace返回行号,当它来自catch时。奇怪的是,只有当我抓住异常,而不是在没有被抓住的情况下抛出它。