在 C# 和 VS2012 中,如何找到使用特定“using”指令的所有行?

In C# and VS2012, How do I find all lines that make use of a particular "using" directive?

提问人:Earendil 提问时间:5/13/2015 更新时间:5/13/2015 访问量:113

问:

我希望我能找到一种更好的方法来表达标题,但希望随着我的解释,它会变得更加清晰。我还希望 Visual Studio 支持我想使用它的用途,或者有人知道可以回答我问题的插件或巧妙的解决方法。

非常简单的例子:

using System.IO
public class MyClass
{
    if (File.Exists("myfile.txt"))
    {
        //Do something that doesn't involve System.IO
    }
}

我想指向一个特定的 use(如 System.IO)并找到依赖于 using 指令的每一行,例如“File.Exists”行。

在 VS2012 中,您可以右键单击文件开头的“using”指令,然后选择“组织使用”>“删除未使用的使用”。这很好,但我想做相反的事情。

一个笨拙且耗时的解决方案。一种方法是擦除一个 using 行,并尝试构建,然后查看所有错误以尝试找到合适的错误。这个答案感觉像是一个黑客,需要时间,并将结果作为错误列表产生。

情况。我正在重构一堆代码。其中一个类有 4000 多行代码和 13 个 using 指令。在查看内部引用时,我可以看出这个 800 磅的大猩猩类引用了来自系统不同部分的命名空间。我想确定使用特定用法的代码区域,以帮助我细分此类。简单地使用缺少的 using 进行编译需要时间,并且不会以有用的格式生成结果。

尝试以另一种方式表达问题: “如何让 Visual Studio 向我显示依赖于特定 using 指令的所有代码行?”

C# visual-studio-2012 using指令

评论

0赞 Jeff Mercado 5/13/2015
据我所知,它没有。vanilla VS2012 的重构功能根本不存在。编写一些分析器会更容易,并可能编写代码修复以使其自动化该过程。
1赞 Ben Voigt 5/13/2015
您也可以使用完全限定名称对系统的另一部分产生依赖关系,然后不涉及 using 指令。我会忘记使用指令并尝试识别用法。你试过NDepend吗?我已经有一段时间没有使用它了,但 IIRC 测量组件之间的耦合正是它最擅长的。
0赞 Martin Liversage 5/13/2015
我建议使用 ndepend.com
1赞 frenchie 5/13/2015
我实际上会选择笨拙且耗时的解决方案:将 using 行替换为 //using System.IO with comments,然后构建解决方案以获取错误列表。

答:

1赞 User555 5/13/2015 #1

您可以右键单击 using 语句,然后从下拉菜单中单击“查找所有引用”。

评论

0赞 Earendil 5/13/2015
这并不完全能做到。首先,它只返回在方法调用中指定命名空间的结果。所以它会找到 if (System.IO.File.Exists(“myfile.txt”)) 但它不会找到 if (File.Exists(“myfile.txt”))。它还搜索整个项目,而不是一个文件/类。
0赞 User555 5/15/2015
明白了。在你找到指令之后,你到底打算如何处理所有使用指令的人?
0赞 Earendil 5/16/2015
我们把它作为一种指导,指导如何打破 4000 行类。使用内部库名称的真实示例意义不大,但想象一下,您有一个巨大的类,它正在调用用于“UI 显示”、“数据库访问”的库。如果你说发现有 1000 行代码正在调用数据库,你可能会怀疑它是移动到它自己的类的一个很好的候选者。
0赞 User555 5/17/2015
我可以建议再尝试两件事:1)如果您使用的是Visual Studio 2012或2013,则可以突出显示该特定的使用指令或代码中的任何其他单词,使用相同单词的所有其他地方都将在您的代码中突出显示,以便您可以更轻松地看到它们。2)您可以按CTRL + F,然后将显示一个搜索对话框。选中替换为复选框,在搜索字段中输入您要查找的单词,在替换字段中键入 /*找到您*/,使用该单词的所有代码部分都将替换为 /*找到您*/ 注释。