2012-04-19 47 views
3

是否可以使用Roslyn檢測不可達代碼或其他內置編譯警告?是否有可能使用Roslyn檢測不可達代碼或其他內置編譯警告

private void DoSomething() 
{ 
    string a = "TEST"; 

    throw new Exception("Why would I throw an exception here?"); 

    a = "This will never be reached"; //this is a compile time warning for unreachable code...Can I detect it? 

} 

我試過檢查語義和語法方法中的節點屬性,但沒有看到任何問題或警告集合。

回答

7

您可以使用語義模型的AnalyzeRegionControlFlow方法來發現它。您可以將這種傳遞稱爲與您感興趣的語句對應的文本範圍。AnalyzeRegionControlFlow將返回一個具有屬性RegionEndPointIsReachable的數據結構,它還會告訴您所有跳入或跳出該區域的語句。

如果您想知道如何找到編譯器將報告的實際診斷信息,則需要在語義模型上使用GetDiagnostics方法。

+0

謝謝,我還沒有看到在我使用Roslyn到這一點時AnalyzeRegionControlFlow的用法。很棒。 – Jay 2012-04-20 13:14:16

相關問題