转到定义&查找所有引用在Visual Studio中不起作用

时间:2014-02-11 03:46:50

标签: c# vb.net visual-studio

我在VS 2013 Pro中有一个Windows窗体解决方案,它在VB和C#中都有几个项目。其中一个依赖项如下所示:

Startup Project, SP (VB)
    Custom Controls Library, CL (C#)
       Utils/Constants Library, UL (VB)
    UL (again, referenced directly from SP)

我的问题是,当我从SP到CL定义时,它会转到对象浏览器。当我从CL转到UL到UL时,它会调出元数据。但是当我从SP转向Def到UL时,它运行正常。此外,当我在CL中查找控件的所有引用时,它不显示SP引用,但是当我从SP执行它时,它会在SP和CL中显示引用。

我在StackOverflow,MSDN和其他几个论坛上搜索过,并尝试了我发现的所有建议:我删除了所有引用并重建它们(我100.0%确定它们都是项目引用,而不是文件引用)。我已经完全删除了我的解决方案文件并从头开始添加了项目。我确保引用中的GUID与引用的GUID相匹配。它们都是使用相同的框架构建的,并且都是针对相同的处理器类型。所有项目都在生成pdb和xml调试文件。我假设VS2013取消了IntelliSense数据库文件,因为我在磁盘上找不到任何要删除的文件(或者我会试过它!)。

另一个有趣的(我假设相关)细节是CL中的方法/属性重命名不会反映在SP中。不仅重命名SP子类的符号,而且在重建之前,Visual Studio甚至不会提醒我此错误。因此,似乎IntelliSense已损坏,或者我还缺少其他东西。

我真的很茫然。据我所知,此功能已经奏效。从2012年升级到2013年,我无法确定它是否有效。是否有人有相同的经历?我已经禁用了附加组件,重建了解决方案,重新添加了项目依赖项...我会重新安装Visual Studio,但如果有一个更简单的方法,我真的不想失去几个小时的开发。

4 个答案:

答案 0 :(得分:2)

目前我只提供Express Edition。我用VS2013 Express尝试了新创建的空项目,就像你描述的那样(即VB - > C# - > VB)。我看到你描述的所有行为, VS2012 Express显示完全相同的行为。

因此,我担心重新安装无济于事。

我通常使用包含多个项目的解决方案,而Go To Definition等在项目中工作非常顺利,但我从未使用过包含使用多种语言的项目的解决方案。

我想你缺少的功能,“在使用不同.NET语言的项目中顺利运行IntelliSense”,从未实现过。

更新: VS2010的行为方式相同。

答案 1 :(得分:2)

最近已升级到VS2013并且可以告诉您,当您单击定义它的函数名称时,“查找所有引用”选项用于显示解决方案中调用该函数的所有位置。它现在所做的只是告诉你你正在看的那个。

现在我面前有218行:公共共享函数MyNewFunction(ByVal test As String)

如果我右键单击MyNewFunction并选择“查找所有引用”,则输出窗口显示“查找符号结果 - 找到1个匹配项”,它与上面的功能名称,文件和行号相同。 所以它实际上没用。

除非当然有一些我们尚未见过的隐藏设置?

答案 2 :(得分:0)

我遇到了同样的问题,试图找到Find All Refs选项,发现它与多种语言或VS的版本无关,只是与排除的文件有关。在解决方案资源管理器中,您可能会看到一个模糊的虚线文件图标,就像我的文件CenterConverter.cs一样:

enter image description here 普通文件有Exclude From Project的右键单击菜单选项,点图标源文件有一个Include In Project

查看已排除文件的属性,您会看到Build Action(是否编译)和Copy To Output Directory属性丢失。

通过在项目中包含该文件,它将被编译,Go To DefinitionFind All References等选项开始变得有意义。

答案 3 :(得分:0)

我在VisualStudio 2010中遇到了类似的问题,其中“查找所有引用”命令在正常使用一段时间后消失了。

使用快捷键会显示“当前不可用”的消息,而尝试“转到定义”则会显示错误对话框。

退出并重新打开Visual Studio无法解决问题,我找不到任何会改变这种情况的设置。

奇怪的是,问题仅限于一个源代码文件,而不是另一个。

出于好奇,我关闭了受影响的源代码文件,然后通过双击解决方案资源管理器中的文件重新打开它,这解决了这个问题。

我最好的猜测是,某些内容损坏了文件的缓存索引,并且关闭并重新打开,提示Visual Studio刷新此缓存。