Этот вид связей возвращается к question I had earlier about a regex to search for a method containing a particular string, и кто-то предложил использовать этот 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);
}
}
}
Этот метод перебирает все папки и записывает имя файла в текстовый файл, если он содержит ключевой метод, но я понятия не имею, как извлечь только whatevers в теле метода, так как он перегружен все 3K экземпляры метода различны.
бы наилучший подход будет получить индекс имени методы, то индекс каждого {
и }
, пока я не столкнуться следующим аксессора модификатора (означающий я добрался до конца DetachEvents
)? Тогда я мог бы просто искать между indexOfMethod
и indexOfEndMethod
за +=
.
Но это звучит очень неряшливо, я надеялся, что у кого-то может быть лучшая идея?
@ P.Brian.Mackey Я не уверен, что вы имеете в виду. Я не хочу, чтобы мой инструмент менял какой-либо код, просто скажите, какие из них имеют ошибку. Таким образом, это только чтение их содержимого и запись имени файла в локальный файл, если у них есть вопиющие данные, для меня вернуться и вручную изменить. Я не ожидаю тревожного количества неправильных данных, но я не хочу вручную проверять файлы 3K;) – sab669
У вас действительно есть 3000 различных перегрузок одного и того же метода в вашей кодовой базе? – acfrancis
@acfrancis Быстрое выполнение кода здесь, в моем сообщении без какой-либо «фильтрации», дает текстовый файл с примерно 2,9 тыс. Записей или около того. На самом деле они не перегружают метод из одного общего интерфейса, но они имеют только одну и ту же подпись метода ('private void DetachEvents()'), где она идет, и, как следует из названия, отделяет события от каждого элемента управления. Не совсем то же самое, что перегрузка, но достаточно близко, что я просто назвал это для простоты. – sab669