在项目中查找一个dll的所有引用

11

在Visual Studio 2010(或2012)中,有没有一种方法可以定位所有引用了所引用的dll中定义的任何类/方法的代码中的引用。

目前我有两个使用的过程(取决于情况):

  • 第一个涉及仅从项目中删除dll引用,然后记录所有编译错误位置。
  • 另一种方式是在对象浏览器中打开引用,然后展开到其命名空间,并为每个命名空间进行手动搜索,但这并不总是帮助找到所有引用,并且由于遗留代码具有跨多个程序集的相同命名空间,因此需要过滤掉很多噪音。

这些都不是真正理想的解决方案,是否有更简单的方法来实现这一点?也许通过VS扩展。

4个回答

13
您可以在安装Resharper后找到此功能:
展开“引用”并选择“查找依赖于模块的代码”
结果将如下所示:

1
太棒了!感谢这个提示。我从来不知道 Resharper 可以做到这一点! - Nathan Tregillus

5

您没有Resharper,但您有Sublime Text吗?

在Sublime Text中,选择“打开文件夹”,并选择包含解决方案的文件夹。然后选择菜单项查找 -> 在文件中查找...

在“位置:”字段中输入:

*.scsproj

然后在“查找:”字段中,搜索字符串。
Include="[full namespaced name of library]"

例如:

举个例子:

Include="System.Xml.Linq"

此命令将在解决方案中查找所有引用了System.Xml.Linq dll的项目。


1
我并不是在寻找引用dll的项目,而是在寻找使用dll中定义成员的类。 - Seph
1
这太棒了!我几年前就可以用它了。虽然我使用了类似于Include=".*Dll\.Name的正则表达式模式(请注意.上的转义字符)。 - P.Brian.Mackey

4

没有安装任何扩展程序?

只需要写一段代码...最简单的方法...我发现通过代码编辑项目文件非常容易。

  private static List<string> FindAllRefrences(ref int ctr, string dir, string projectToSearch)
    {
        List<string> refs = new List<string>();
        foreach (var projFile in Directory.GetFiles(dir, "*.csproj", SearchOption.AllDirectories))
        {
            if (projFile.IndexOf(projectToSearch, StringComparison.OrdinalIgnoreCase) >= 0)
                continue;

            var lines = File.ReadAllLines(projFile);

            foreach (var line in lines)
            {
                if (line.IndexOf(projectToSearch, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    ctr++;
                    refs.Add(projFile);
                    break;
                }
            }
        }

        return refs;
    }

3

在Visual Studio 2019中执行此操作的步骤:

  1. 在解决方案资源管理器中展开项目。
  2. 展开引用部分。
  3. 右键单击与所需dll相应的引用(名称应相同)。
  4. 选择在对象浏览器中查看。
  5. 展开与您的dll对应的对象。
  6. 展开命名空间。
  7. 右键单击类并选择查找所有引用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接