這種情況與question I had earlier about a regex to search for a method containing a particular string有關,有人建議我使用名爲Roslyn的MS工具,但自2012年推出以來,它不適用於VS2010。如何從文件中提取未知數量的文本
因此,我正在寫這個小工具來保留包含特定方法聲明(類似於25k文件的3k超載此方法)的解決方案中的每個文件的列表。然後,我只想將該文件列表過濾爲僅包含方法體內的+=
。
static void DirSearch(string dir)
{
string[] files = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories);
foreach (var file in files)
{
var contents = File.ReadAllText(file);
if (contents.Contains("void DetachEvents()"))
{
//IF DetachEvents CONTAINS += THEN...
WriteToFile(file);
}
}
}
這種方法遍歷所有文件夾和寫入的文件名,如果它包含的主要手段的文本文件,但我不知道如何提取方法主體只是凡是,因爲它重載所有3K該方法的實例是不同的。
請問最好的辦法是獲得方法名的索引,那麼每個{
和}
的指標,直到我遇到下一個訪問修飾符(表示我已經得到了的DetachEvents
結束)?然後我可以在indexOfMethod
和indexOfEndMethod
之間搜索+=
。
但它聽起來很sl,,我希望有人可能有更好的主意?
@ P.Brian.Mackey我不確定你的意思。我不打算讓我的工具修改任何代碼,只是告訴我哪些代碼有錯誤。所以,它只是讀取它們的內容,並且如果文件名有明顯的數據,則將其寫入本地文件,以便我返回並手動更改。我不期望有驚人數量的錯誤數據,但我不想手動檢查3K文件;) – sab669
您的代碼庫中是否真的有3,000種不同的重載方法? – acfrancis
@acfrancis在沒有任何「過濾」的情況下,在我的文章中快速運行代碼會生成一個包含大約2.9k條目左右的文本文件。它們實際上並不是從一個公共接口重載一個方法,但它們只是在方法簽名('private void DetachEvents()')的地方,並且顧名思義就是將每個控件的事件從它上面分離出來。與重載不完全相同,但足夠接近,我只是爲了簡單起見而將其稱爲。 – sab669