查找所有引用不会在其他不同语言的 .NET 项目中找到成员引用

Find all references doesn't locate member references in other .NET projects of differing language

我有一个 VS 2013 解决方案,其中一个 VB.NET ASP.NET 项目引用了同一解决方案中的多个 c# class 库项目(不是 DLL)。我对其中一个 c# 项目的一些方法重载中的逻辑进行了大量更改。由于VB.NET项目大量使用了这些重载,我想看看有多少地方引用了这些方法。我转到包含更改的 c# 项目,右键单击我想要的重载,然后 select 查找所有引用,但它只显示 c# 项目中的引用。但是,当我转到 VB.NET 项目中的其中一个方法时,它会找到 VB.NET 项目中的所有引用以及 c# 项目中的方法声明。

我可以在解决方案范围内对方法名称进行文本搜索,但此方法名称已被多次使用,因为它已过载。因此,我想搜索特定的重载方法签名,而不是方法名称。

这是 VS 2013 的已知缺点吗?我还注意到的其他事情是 selecting Go To Reference 从 VB.NET 项目中使用在 c# 项目中声明的方法将带您到对象浏览器而不是直接到源项目本身的方法定义。

这是一个老问题,在微软的反馈网站上有很多关于它的错误反馈报告。规范的可能是 this one。引用 Dustin Campbell 的回复:

The general problem is that C# and Visual Basic do not share any common infrastructure with regard to the symbol tables that are used for features like Find All References, Go to Definition or Rename. So, such features don't work between multiple languages. That said, we are looking at ways to change this in the future, but the work required is very substantial.

稍微注释一下,C# 和 VB.NET IDE 表面上看起来很相似,但在本质上非常 不同。部分原因是他们得到了微软内部不同团队的支持,这是任何软件公司的生存策略,大团队行不通。但最重要的是,历史在这方面发挥了重要作用,Visual Basic 在很长一段时间内都有强大的 IDE 支持。当他们搬到 VB.NET 时,他们并没有放弃这项工作,这至少是因为他们必须支持所有以前的 IDE 功能,以免疏远他们现有的客户群。 C# 团队摆脱了包袱,重新开始,他们从头开始。不可避免地,它们之间的内部结构(如 IntelliSense 符号表)截然不同。

解决 "common infrastructure" 问题并没有被遗忘,Roslyn 项目是重要的一步。花了很长时间才完成,但今天准备好了。集成到VS2015中。它是否实际上 解决了这个问题我还不知道,几个月后我会知道。也许拥有 RC 版本的人可以确认。他们确实创建了两个版本的 Roslyn,一个用于 C#,另一个用于 VB.NET。呃哦。