2016-09-28 47 views
3

我曾经是能拉我的行号和类例外具有以下如何从网络核心中的异常中获取行号和文件名?

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核心1.0类库的工作,现在每当我试图拉动该信息的行号始终为0,文件名始终为空。

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

对以下提供的答案说话。我已经在使用“System.Diagnostics.StackTrace”:“4.0.1”并且具有相同的结果。空文件名和0文件编号。我甚至开始了一个只复制他的代码和相同结果的新项目。空文件名称,并使用“System.Diagnostics.StackTrace” 0文件编号:“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应用程序访问这些服务的方式与传统框架不同,并且与应用于系统的安全策略相冲突。我联系了我们的微软代表,寻求更多信息,看看问题是否无法解决。将继续更新。

回答

4

在我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(); 
    } 
} 
+0

我已经使用“System.Diagnostics.StackTrace”:“ 4.0.1“,这不是说我的问题不好意思。我还创建了一个新项目,并以相同的结果复制了您的代码。空文件名和0行号 – Bastyon

+0

@Beseon在这种情况下,你应该检查你是否有过时的版本,或者比WillRay更新。你正在使用哪个版本? –

+0

你是什么意思?它的stacktrace 4.0.1是他列出的版本,这就是我使用的版本。 – Bastyon