Как в C# и VS2012 найти все строки, в которых используется определенная директива using?

Я хотел бы найти лучший способ сформулировать заголовок, но, надеюсь, он станет более понятным, когда я объясню. Я также надеюсь, что Visual Studio поддерживает то, для чего я хотел бы его использовать, или что кто-то знает о подключаемом модуле или удобном обходном пути, который ответит на мой вопрос.

Очень простой пример:

using System.IO
public class MyClass
{
    if (File.Exists("myfile.txt"))
    {
        //Do something that doesn't involve System.IO
    }
}

Я хочу указать на конкретное использование (например, System.IO) и найти каждую строку, которая зависит от директивы использования, например строку «File.Exists».

В VS2012 вы можете щелкнуть правой кнопкой мыши директивы «using» в начале файла и выбрать «Организовать использование» > «Удалить неиспользуемое использование». Это здорово, но я хочу сделать наоборот.

Неуклюжее и трудоемкое решение. Один из способов – стереть используемую строку и попытаться построить ее, а затем просмотреть все ошибки, чтобы попытаться найти подходящие. Этот ответ похож на взлом, требует времени и выдает результат в виде списка ошибок.

Обстоятельство. Я рефакторинг кода. Один из классов содержит более 4000 строк кода и 13 директив using. Глядя на внутренние ссылки, я могу сказать, что этот класс горилл весом 800 фунтов ссылается на пространства имен из самых разных частей системы. Я хочу определить области кода, которые используют конкретное использование, чтобы помочь мне сегментировать этот класс. Простая компиляция с отсутствующим использованием требует времени и не дает результатов в полезном формате.

Чтобы попытаться сформулировать вопрос по-другому: «Как мне заставить Visual Studio показать мне все строки кода, которые зависят от конкретной директивы using?»


person Earendil    schedule 12.05.2015    source источник
comment
Насколько я помню, это не так. Возможностей рефакторинга в vanilla VS2012 просто не было. Вместо этого было бы проще написать несколько анализаторов и, возможно, исправить код, чтобы автоматизировать процесс.   -  person Jeff Mercado    schedule 12.05.2015
comment
Вы можете иметь зависимость от другой части системы, используя также полные имена, тогда никакая директива использования не задействована. Я бы забыл об использовании директив и попытался определить их использование. Вы пробовали NDepend? Прошло некоторое время с тех пор, как я использовал его, но измерение связи между компонентами IIRC — это именно то, что он делает лучше всего.   -  person Ben Voigt    schedule 12.05.2015
comment
Я предлагаю использовать ndepend.com.   -  person Martin Liversage    schedule 12.05.2015
comment
На самом деле я бы выбрал неуклюжее и трудоемкое решение: заменить строку using на //using System.IO с комментариями, а затем построить решение, чтобы получить список ошибок.   -  person frenchie    schedule 12.05.2015


Ответы (1)


Вы можете щелкнуть правой кнопкой мыши оператор using, а затем выбрать «Найти все ссылки» в раскрывающемся меню.

person User555    schedule 12.05.2015
comment
Это не совсем так. Во-первых, он возвращает только те результаты, которые указывают пространство имен в вызове метода. Таким образом, он найдет if (System.IO.File.Exists(myfile.txt)), но не найдет if (File.Exists(myfile.txt)). Он также ищет весь проект, а не один файл/класс. - person Earendil; 13.05.2015
comment
Понимаю. Что именно вы собираетесь делать со всеми директивами использования после того, как вы их нашли? - person User555; 15.05.2015
comment
Используйте это как своего рода руководство по тому, как разбить класс линейки 4000. Реальный пример с использованием собственных имен библиотек не будет иметь большого значения, но представьте, что у вас есть гигантский класс, который вызывает библиотеки, используемые для отображения пользовательского интерфейса, доступа к базе данных. Если вы скажете, что найдено 1000 строк этого кода, которые обращались к базе данных, вы можете заподозрить, что это хороший кандидат на перемещение в собственный класс. - person Earendil; 15.05.2015
comment
Я могу предложить попробовать еще 2 вещи: 1) если вы используете Visual Studio 2012 или 2013, вы можете выделить это конкретное использование директивы или любое другое слово вашего кода. Все остальные места, где используется это же слово, будут выделены в вас код, чтобы вам было легче их увидеть. 2) Вы можете нажать CTRL+F, после чего появится диалоговое окно поиска. Установите флажок «Заменить на», введите слово, которое вы ищете, в поле поиска, введите /*found you*/ в поле замены, и все части кода, в которых использовалось это слово, будут заменены на /*found you* / комментарий. - person User555; 17.05.2015