У меня есть большое решение Visual Studio многих проектов C#. Как найти все статические конструкторы? У нас было несколько ошибок, в которых некоторые делали глупые вещи, я хочу проверить других.Как найти все статические конструкторы?
ответ
В Visual Studio вы можете искать в коде, используя регулярное выражение.
Попробуйте это:
static\s+\w+\s*\(
Вы можете настроить набор символов, если вы позволите вашим разработчикам использовать другие than letter, numbers and underscore. Упрощенное регулярное выражение с использованием \w
Это работает, потому что для других целей использования ключевого слова static
требуется, по крайней мере, тип возврата.
Спасибо, работает. –
Вы можете попробовать использовать отражение над встроенными сборками, а не искать исходный код: http://msdn.microsoft.com/en-us/library/h70wxday(v=vs.110).aspx Это может быть быстрее/проще, чем grepping текста.
Вы также можете посмотреть такие инструменты, как NDepend: http://www.ndepend.com/ Фактически это позволит вам писать запросы linq по коду. Это не дешево.
Вы можете использовать ildasm и сбросить сборку, затем выполнить поиск файла .il для .cctor (не .ctor, используйте дополнительный c). Статические конструкторы реализованы с использованием методов .cctor.
ildasm program.exe /out=program.il
Пример:
.method private hidebysig specialname rtspecialname static
void .cctor() cil managed
{
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "Static constructor"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method Animal::.cctor
Я думаю, что с помощью отражения является самым быстрым способом для достижения этой цели. Вы можете добавить новый проект в решение и написать небольшой фрагмент кода (возможно, за исключением имен конструкторов в текстовый файл):
public static IEnumerable<ConstructorInfo> GetAllStaticConstructorsInSolution()
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
return assemblies.SelectMany(assembly => assembly.DefinedTypes
.Where(type => type.DeclaredConstructors.Any(constructorInfo => constructorInfo.IsStatic))
.SelectMany(x => x.GetConstructors(BindingFlags.Static)))
.Distinct();
}
Над Linq запрос должен работать, хотя я не проверял.
- 1. Как статические конструкторы и частные конструкторы отличаются?
- 2. Assembly.GetCallingAssembly() и статические конструкторы?
- 3. Попытка понять статические конструкторы
- 4. Почему названные конструкторы статические
- 5. Java - конструкторы статические?
- 6. Статический класс, статические конструкторы и статические свойства
- 7. Статические конструкторы и методы расширения
- 8. Зачем нам нужны статические конструкторы?
- 9. Как найти все конструкторы в базе java-кода?
- 10. Factory статические методы и частные конструкторы
- 11. Статические конструкторы вызываются при использовании конструктора?
- 12. Статические конструкторы в F # - когда они запускаются?
- 13. Найти все неиспользуемые статические переменные из файла
- 14. C# JIT и статические конструкторы снова
- 15. Создание объектов: конструкторы или статические заводские методы
- 16. Статические конструкторы вызывают накладные расходы на производительность?
- 17. Где хранятся все статические элементы?
- 18. Как найти все статические переменные в моем проекте C#?
- 19. Как компилятор JIT решает, когда инициализировать статические конструкторы
- 20. Как статические конструкторы могут быть сделаны не частными?
- 21. Как найти глобальные статические инициализаций
- 22. C# Статический инициализатор с (и без) Смешанные статические конструкторы
- 23. Статические/глобальные конструкторы на GCC 4.1/HP-UX 11.23
- 24. Java наследования поведение Конструкторы и статические/динамическое связывание
- 25. Почему не все статические конструкторы, вызываемые в C# (т. Е. Те из родительских классов)?
- 26. Когда выполняются статические конструкторы до или после статических полей?
- 27. Django: Все статические файлы 404 (но findstatic может их найти)
- 28. В каком порядке называются статические конструкторы родительского и дочернего классов?
- 29. Может ли Visual Assist найти все ссылки, чтобы найти только ссылки на определенные конструкторы классов?
- 30. Простой способ объявить все родительские конструкторы?
grep the codebase? Какая версия Visual Studio? – AlG
Возможно, простое регулярное выражение типа «static \ w + \ (« может помочь найти – HimBromBeere
@HimBromBeere: использование '\ w' на самом деле проще и охватывает больше случаев. Я обновил свой ответ в этом направлении. Thx –