我怎么能得到行号和文件名从一个异常在网核心

本文关键字:一个 异常 核心 怎么能 文件名 | 更新日期: 2023-09-27 18:09:34

我过去可以使用下面的

来获取异常的行号和类
   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();

然而,在。net Core 1.0中使用类库,现在每当我试图拉出该信息时,行号总是0,文件名总是null。

我将needfileinfo布尔值设置为true,并且pdb文件存在。这是一些在。NET Core框架中还不能工作的功能,还是我现在应该采取的一些不同的方法?

说出下面提供的答案。我已经在用"System.Diagnostics"了。StackTrace": "4.0.1"并得到相同的结果。Null FileName和0 FileNumber。我甚至开始了一个新项目,只复制他的代码和相同的结果。文件名称为空,文件编号为0。StackTrace": "4.0.1"

更新::

我在不同的工作站上尝试了我能想到的每一个选项。它工作得很好。所以显然是我工作站上的某些东西失败了…所以这个问题是环境问题而不是包装的问题。当我找出问题所在后,我会再次更新。

所以经过进一步有趣的调查。虽然它是环境的,但它也是特定于Net Core的。在相同环境的非Net Core应用程序中,StackTrace工作得很好。但是,我在事件日志

中获得安全审计失败。
A privileged service was called.
Service:
    Server: Security
    Service Name:   -
Process:
    Process ID: 0x55a0
    Process Name:   C:'Program Files (x86)'Microsoft Visual Studio 14.0'Common7'IDE'Remote Debugger'x64'msvsmon.exe
Service Request Information:
    Privileges:     SeCreateGlobalPrivilege
and  
A privileged service was called.

Service:
    Server: Security
    Service Name:   -
Process:
    Process ID: 0x5628
    Process Name:   C:'Program Files (x86)'Microsoft Visual Studio 14.0'Common7'IDE'CommonExtensions'Microsoft'IntelliTrace'14.0.0'IntelliTrace.exe
Service Request Information:
    Privileges:     SeCreateGlobalPrivilege

每当我试图从一个网络核心应用程序运行它。很明显,Core应用程序访问这些服务的方式与传统框架不同,并且它与应用于系统的安全策略相冲突。我已经联系了我们的微软代表,希望获得更多信息,看看这个问题是否无法解决。将继续更新

我怎么能得到行号和文件名从一个异常在网核心

在我的project.json文件中使用"System.Diagnostics.StackTrace": "4.0.1",我能够通过以下代码正确获取错误的行号和文件名:

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();
    }
}