Подтвердить что ты не робот

Как найти все статические переменные в моем проекте С#?

Я хочу запустить часть моей командной строки параллельно с несколькими потоками, и я боюсь, что может остаться какая-то статическая переменная, которую я должен исправить (например, сделав ее [ThreadStatic]). Есть ли какой-либо инструмент или простой способ найти их в моем проекте?

Конечно, просто поиск "static" не очень помогает: у меня много статических методов, которые отлично работают и находят с любым количеством потоков

4b9b3361

Ответ 1

Поиск файлов static:b+:i:b+:i:b*[=;] с параметром regexp в Visual Studio должен включать статические переменные для вас. Он также будет приводить операторов ==, но их относительно легко отфильтровать визуально.

Ответ 2

Примечание. ответ 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

Ответ 3

Помимо трюков IDE реальный способ воина будет использовать Assembly.Load() для загрузки DLL приложения в память, а затем с помощью поиска отражений через все типы для статических полей public/private/protected. :)

Ответ 4

Прежде всего, вам нужно открыть окна 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,...

Ответ 5

Самый простой способ найти все ваши статические поля в одном месте, скорее всего, будет через панель Class View в Visual Studio (Ctrl + W, C по умолчанию в режиме С# - также в меню View).

Вы можете установить некоторые примитивные фильтры. К сожалению, статичность не является одним из них. Тем не менее, вы можете использовать доступные фильтры, чтобы уменьшить результаты, в зависимости от стиля кодирования.

В качестве альтернативы вы можете создать программу, которая использует отражение, чтобы вытащить каждое статическое поле и проверить его атрибуты. Если ThreadStaticAttribute нет среди них, попросите его выслать сообщение. (Это соответствует очередному ответу, из которого вы можете получить более подробную информацию.)