我想實現更復雜的錯誤處理。爲了實現我的目標,我需要從curent StackTrace中過濾出非用戶代碼方法(框架)。從StackTrace中篩選出非用戶代碼方法
在ASP.NET典型的StackTrace中,你可能會猜測許多方法對於調試目的來說是非常不相關的,因爲它們在用戶代碼之外。視覺工作室給你選擇過濾出這個非用戶代碼(幀),所以我猜它是可能的。然而,在探索StackFrames(和方法,模塊,程序集......)的方法和屬性大約30分鐘後,我找不到任何可用於識別「系統」框架的東西。
我已經結束了手動指定要登錄哪些模塊(模塊是程序集的一部分,在我的案例中是1:1)。
有沒有更好的方法來做到這一點?只需包含核心ASP.NET之外的所有內容
謝謝!我想沒有直接的方法來做到這一點(類似IsSystem屬性),儘管你的建議非常接近。天真和更復雜的方法似乎很合理。我對彙編簽名不是很有經驗,但是系統程序集總是擁有相同的公鑰令牌,而不管它們的版本是什麼? – NeverStopLearning
不,不是所有程序集(即使在同一版本中)都有相同的公鑰令牌。您必須獲取列表(只需瀏覽c:\ windows \ assembly)並將其過濾掉。你也可以考慮使用公司名稱(編輯我的答案)。 –
在我的解決方案中,我確保所有類型都在我自己的命名空間層次結構中聲明。由於它們都具有相同的根名稱空間,我只需檢查方法的聲明類型的全名'frame.GetMethod()。DeclaringType.FullName'。如果它匹配'... FullName.StartsWith('MyRootNameSpace')',這是我的代碼,否則它是微軟或某個第三方的代碼。 – Zarepheth