Ответ 1
Поиск файлов static:b+:i:b+:i:b*[=;]
с параметром regexp в Visual Studio должен включать статические переменные для вас. Он также будет приводить операторов ==
, но их относительно легко отфильтровать визуально.
Я хочу запустить часть моей командной строки параллельно с несколькими потоками, и я боюсь, что может остаться какая-то статическая переменная, которую я должен исправить (например, сделав ее [ThreadStatic]
). Есть ли какой-либо инструмент или простой способ найти их в моем проекте?
Конечно, просто поиск "static"
не очень помогает: у меня много статических методов, которые отлично работают и находят с любым количеством потоков
Поиск файлов static:b+:i:b+:i:b*[=;]
с параметром regexp в Visual Studio должен включать статические переменные для вас. Он также будет приводить операторов ==
, но их относительно легко отфильтровать визуально.
Примечание. ответ dasblinkenlight работает только на Visual Studio 2010 и старше.
Ниже приведен перевод для Visual Studio 2012 и новее:
static(?([^\r\n])\s)+(\b(_\w+|[\w-[0-9_]]\w*)\b)(?([^\r\n])\s)+(\b(_\w+|[\w-[0-9_]]\w*)\b)(?([^\r\n])\s)*[=;]
Перевод сделан со ссылкой: http://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.110).aspx
Помимо трюков IDE реальный способ воина будет использовать Assembly.Load()
для загрузки DLL приложения в память, а затем с помощью поиска отражений через все типы для статических полей public/private/protected.
:)
Прежде всего, вам нужно открыть окна Find in Files
из меню Edit->Find and Replace->Find in Files
или сочетания клавиш Ctrl + Shift + F.
Затем вы должны использовать это регулярное выражение для поиска всех ваших статических переменных в Current Project
или в Entire Solution
:
static \w*[ \t]*\b(\w+|[\w-[0-9]]\w)\b[ \t]+\b(\w+|[\w-[0-9]]\w*)\b[ \t]*[=;]
Обратите внимание на вариант Use Regular Expressions
в разделе Find options
.
Это регулярное выражение также поддерживает readonly, virtual,...
Самый простой способ найти все ваши статические поля в одном месте, скорее всего, будет через панель Class View в Visual Studio (Ctrl + W, C
по умолчанию в режиме С# - также в меню View
).
Вы можете установить некоторые примитивные фильтры. К сожалению, статичность не является одним из них. Тем не менее, вы можете использовать доступные фильтры, чтобы уменьшить результаты, в зависимости от стиля кодирования.
В качестве альтернативы вы можете создать программу, которая использует отражение, чтобы вытащить каждое статическое поле и проверить его атрибуты. Если ThreadStaticAttribute
нет среди них, попросите его выслать сообщение. (Это соответствует очередному ответу, из которого вы можете получить более подробную информацию.)