Этот вид связан с вопросом , который у меня был ранее о регулярном выражении для поиска для метода, содержащего определенную строку, и кто-то предложил мне использовать этот инструмент MS под названием Roslyn, но он недоступен для VS2010 с момента выхода 2012 года.
Итак, я пишу эту маленькую утилиту, чтобы вести список всех файлов в моем решении, содержащих объявление определенного метода (что-то вроде 3k из 25k файлов перегружает этот метод). Затем я просто хочу отфильтровать этот список файлов только для тех, которые содержат +=
внутри тела метода.
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
+=
.
Но это звучит очень небрежно, я надеялся, что у кого-то может быть идея получше?
+=
вместо-=
, но что я могу с этим поделать. Я попытался использовать поиск регулярных выражений, встроенный в Visual Studios, для поиска всего моего решения для нескольких разных вещей (см. вопрос SO, который я связал в верхней части моего поста), и несколько других людей взвесили, сказав, что это будет очень сложно создать регулярное выражение, которое найдет каждый экземпляр проблемы, потому что каждый метод удаляет различное количество обработчиков событий. Кроме того, я не могу представить себе попытку открыть файлы размером 28 КБ в N++ для поиска. 11.12.2013