如何在c#项目中找到所有静态变量?

时间:2012-02-10 20:10:34

标签: c# static code-analysis static-analysis

我想与多个线程并行运行命令行程序的某些部分,我担心可能会有一些静态变量,我必须修复(例如,通过使其成为[ThreadStatic])。在我的项目中是否有任何工具或简单方法可以找到这些?

当然,简单地搜索"static"并没有多大帮助:我有很多静态方法可以很好地工作并且可以使用任意数量的线程

5 个答案:

答案 0 :(得分:12)

注意: 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

答案 1 :(得分:11)

在Visual Studio中使用regexp选项搜索文件static:b+:i:b+:i:b*[=;]应该为您打开静态变量。它还会带来运营商==,但它们应该相对容易过滤掉。

答案 2 :(得分:3)

除了IDE技巧之外,真正的战士方法是使用Assembly.Load()将应用程序DLL加载到内存中,然后使用反射搜索所有类型的公共/私有/受保护静态字段。 :)

答案 3 :(得分:1)

在一个地方找到所有静态字段的最简单方法可能是通过Visual Studio中的“类视图”面板(默认情况下在{C#模式下Ctrl + W, C - 也可以在View下查找菜单)。

您可以设置一些原始过滤器。不幸的是,静态不是其中之一。但是,您可以根据编码风格使用可用的过滤器来缩小结果。

或者,您可以创建一个使用反射的程序来提取每个静态字段并检查其属性。如果ThreadStaticAttribute不在其中,请让它吐出一条消息。 (这与另一个答案相符,您可以从中获得更多详细信息。)

答案 4 :(得分:1)

首先,您必须从Find in Files菜单或Ctrl + Shift + F快捷键打开Edit->Find and Replace->Find in Files个窗口。

然后你必须使用这个正则表达式来搜索Current ProjectEntire 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,...