2012-02-26 136 views
1

我看過Attributes and Reflection,現在我知道如何創建和使用反射來查看屬性的元數據,但可以製作一個獨立的工具來分析cs文件並提取使用的屬性?自定義屬性上的反射或正則表達式

我想要做什麼?

基本上我正在研究一個需要C# code作爲輸入的工具。下一步是查看該源代碼中使用了哪些屬性。提取IntrinsicCustom Attributes

Probem?

這個,如果你在,你的attributes定義相同的項目中使用reflection,但是I do not know in what direction I should move寫一個單獨的工具,可以給你提取靜態和屬性的元數據上面是有道理的。

有人說我應該使用Regex中的文件時,其它說,我需要使用Irony - .NET Language Implementation Kit

此外

上述工作將導致我有一個將被用於應用程序提取屬性attributes(annotation) based Design Pattern RecoverySource Code。我不知道如果Regex會來救援或我需要像Reflection。由於反射涉及運行時。我不必處理運行時間。只是靜態文件分析

+2

我無法理解如何思考和C#項目文件都連接到你的問題。如果你正在使用反射 - 你正在處理已編譯的可執行文件或DLL,所以你不需要解析項目文件。如果您需要使用源代碼 - 不能使用反射 – Archeg 2012-02-26 14:47:46

+0

@Archeg文件只是讀取源代碼並查看實現的內容。而不是反思如果我必須使用源代碼,應該使用什麼? – 2012-02-26 15:23:45

+0

如果你真的需要解析源代碼,我會看看Rosalyn。但我從來沒有使用它,所以不知道它會適合你。你確定你需要解析源代碼嗎?爲什麼不反射套件? – Archeg 2012-02-26 15:54:53

回答

2

如果我正確理解你的問題,你真的需要解析你的代碼。正則表達式不會幫助你,因爲除了解析屬性外,你還需要解析類層次結構。反思可能會訣竅,但你將無法向用戶展示結果。因此,最好的想法是使用任何解析器從源代碼獲取表達式樹,而不是調查它。

如果您不知道選擇哪個解析器 - 我推薦Rosalyn,因爲解析C#代碼應該是最簡單的(它是專爲它設計的)。你可以找到一個例子解析這裏: http://blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/

我覺得應該是真正強大的和有用的爲你的任務

2

顯然我沒有足夠的評論聲望,所以我不得不說這是一個答案。

反射處理運行時類型信息。它是一種發現程序員不知道的類型的東西的機制(也許別人提供了一個代碼庫,並忘記記錄它)。反射將爲您提供有關某個類的公共合約所需的任何信息,包括方法,屬性,字段,屬性和繼承的接口/類。

什麼然而需要一個解析器。解析器是處理文件並提取特定信息的標準編程概念。您正在代碼文件中尋找信息,這些信息不是運行時類型,這意味着反射沒有關於它們的信息,但是你有你的眼睛,因爲它們仍然是代碼文件。如果你的眼睛不夠充足(因爲我懷疑他們不是,如果你問這個問題),你需要編寫一個解析器。從cs文件中提取特定信息非常簡單。和一個屬性的正則表達式是:\[.+\]

+0

其實我正在設計模式恢復工作 – 2012-02-26 17:03:27

+0

我開始認爲你並沒有真正地展示出你需要的東西。就你所說的而言,只要匹配源文件的正則表達式就會給你一個在源文件中聲明的屬性的完整列表。 – lassombra 2012-02-27 02:03:45