使用VS2017+ReSharper排查VB.Net默认窗体实例剩余使用
查找VB.Net中默认窗体实例使用的实用方法(VS2017+ReSharper)
刚好你用的VS2017搭配ReSharper,这俩工具组合起来定位默认窗体实例的使用场景非常高效,给你几个靠谱的方案:
1. 利用ReSharper的内置代码检查
ReSharper专门针对VB.Net的默认窗体实例做了检查规则,步骤很简单:
- 按下
Alt+R, S打开ReSharper设置面板,依次导航到Code Inspection → Inspection Severity → VB.NET → Potential Code Quality Issues - 找到名为
Access to default form instance的规则,把它的级别改成「Warning」或者「Error」 - 按下
Alt+R, G运行全局代码检查,所有使用默认实例的地方都会被高亮标记,直接点击就能跳转到对应代码位置,精准又省心。
2. 用ReSharper结构搜索(SSR)精准匹配
如果你需要更灵活的搜索逻辑,结构搜索比普通正则靠谱得多:
- 按下
Alt+R, S, S打开结构搜索窗口,切换到VB.NET模式 - 设置搜索模式为:
$FormClass$.$Member$ - 点击「Edit Variables」添加约束:
- 给
$FormClass$设置约束:必须是继承自System.Windows.Forms.Form的类 - 给
$Member$设置约束:必须是非共享(Non-Shared)的成员
- 给
- 执行搜索后,所有通过类名直接访问非共享成员的情况(也就是默认实例的使用)都会被找出来,完全不会误判共享成员的调用。
3. 编译时强制报错定位(破坏性验证)
如果你想彻底排查,还可以通过修改构造函数让默认实例无法创建,触发编译错误来定位:
- 给每个窗体类添加一个私有无参构造函数:
Private Sub New() ' 保留原构造函数的初始化代码(比如InitializeComponent()) End Sub - 编译项目,所有使用默认实例的地方都会报编译错误「无法访问私有构造函数」,直接定位到问题代码。注意:这个方法是临时的,排查完记得把构造函数改回Public,或者在测试分支操作。
4. VS自带正则查找(辅助补充)
如果你想快速扫一遍,也可以用VS的全局查找配合优化后的正则:
- 按下
Ctrl+Shift+F打开全局查找窗口,切换到「正则表达式」模式 - 使用正则:
(?<!Shared\s)[A-Z][\w]*\.[a-z][\w]*,这个正则会匹配首字母大写的类名调用首字母小写的非共享成员,不过可能会有少量误判,需要结合上下文验证,适合快速初筛。
内容的提问来源于stack exchange,提问作者Dennis Kuypers
相关产品推荐
相关产品推荐

