Bastyon Bastyon - 2 months ago 104
C# Question

How can I get the line number and file name from an exception in net Core?

I used to be able to pull my line number and class for an exception with the following

System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
var stackFrame = trace.GetFrame(trace.FrameCount - 1);
var lineNumber = stackFrame.GetFileLineNumber();
var file = stackFrame.GetFileName();


However working with a class library in .Net Core 1.0 now whenever I try to pull that information the line number is always 0 and the filename is always null.

I am setting the needfileinfo boolean to true and the pdb files are present. Is this some feature that just doesn't work yet in a NET Core framework or is there some different approach I am supposed to be taking now?

To Speak to the Answer provided below. I am already using "System.Diagnostics.StackTrace": "4.0.1" and having the same result. Null FileName and 0 FileNumber. I even started a new project duplicating only his code and same result. Null File Name and 0 File Number using the "System.Diagnostics.StackTrace": "4.0.1"

UPDATE::

Pursuing every option I can think of I tried this on a different workstation. And it works fine. So apparently its something on my workstation that is failing...So the problem is environmental an not specific to the package. I will update again when I have figured out what the problem is.

Answer

Using "System.Diagnostics.StackTrace": "4.0.1" in my project.json file I was able to properly acquire the line number and file name of an error with this code:

class Program
{
    static void Main(string[] args)
    {
        var test = new Test();
        try
        {
            test.TriggerError();
        }
        catch(Exception ex)
        {
            var trace = new StackTrace(ex, true);
            var frame = trace.GetFrames().Last();
            var lineNumber = frame.GetFileLineNumber();
            var fileName = frame.GetFileName();
        }

    }
}

class Test
{
    public void TriggerError()
    {
        throw new Exception();
    }
}
Comments