2014-02-11 1 views
2

У меня есть решение Windows Forms в VS 2013 Pro, которое имеет несколько проектов как в VB, так и в C#. Одна из зависимостей выглядит следующим образом:Перейти к определению & Найти все ссылки не работают в Visual Studio

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

Моя проблема заключается в том, что когда я Перейти к определению от SP к CL, он принимает меня в браузере объектов. Когда я иду на защиту от CL до UL, он вызывает метаданные. Но когда я иду на защиту от SP до UL, он работает нормально. Кроме того, когда я нахожу все ссылки на элемент управления в CL, он не отображает ссылки SP, но когда я делаю это из SP, он показывает ссылки как в SP, так и в CL.

Я искал на StackOverflow, MSDN и некоторых других форумах и пробовал все найденные мной предложения: я удалил все ссылки и перестроил их (я уверен, что 100% всех ссылок на проекты, а не ссылки на файлы) , Я полностью удалил файл своего решения и добавил проекты с нуля. Я гарантировал, что идентификатор GUID в ссылках совпадает с идентификатором ссылок. Все они построены с одинаковой структурой и все для одного и того же типа процессора. Все проекты производят файлы отладки pdb и xml. Я предполагаю, что VS2013 покончил с файлами базы данных IntelliSense, так как я не могу найти ни одного из них на своем диске для удаления (или я бы попробовал!).

Еще одна интересная (я предполагаю, связанная) деталь заключается в том, что переименования метода/свойств в CL не отражаются в SP. Мало того, что символы подклассов SP не переименованы, но Visual Studio даже не предупреждает меня об этой ошибке, пока я не перестроил. Итак, кажется, что IntelliSense поврежден, или что-то еще мне не хватает.

Я действительно в недоумении. Насколько я помню, эта функциональность сработала. Я не могу точно сказать, сработало ли это с момента обновления с 2012 по 2013 год. Есть ли у кого-то такой же опыт? Я отключил надстройки, восстановил решение, повторно добавил зависимости проекта ... и я бы переустановил Visual Studio, но не хочу терять несколько часов разработки, делая это, если есть более простой метод.

+0

Вы пытались сбросить все настройки? Инструменты/«Настройки импорта и экспорта ...» – Martin

+0

извините, забыли упомянуть, что ... там тоже не повезло. – 404compilernotfound

+0

Do Go To Def и т. Д. Работать с другими проектами? Можете ли вы попробовать это решение на другой установке? Я спрашиваю, потому что, возможно, это не проблема с установкой VS, а с проектами. – Martin

ответ

2

В настоящее время у меня есть только экспресс-издание. Я попробовал его с VS2013 Express с новыми созданными пустыми проектами так, как вы их описали (т. Е. VB -> C# -> VB). Я вижу все описанное вами поведение, , но VS2012 Express показывает точно такое же поведение.

Таким образом, я боюсь, что переустановка не поможет.

Обычно я работаю с решениями, которые содержат несколько проектов, и Go To Definition и т. Д. Работают очень плавно по проектам, но я никогда не работал с решением, содержащим проекты, использующие более одного языка.

Я предполагаю, что функция, которую вам не хватает, «плавно работающая IntelliSense в проектах, использующих разные языки .NET», никогда не была реализована.

Обновление: VS2010 ведет себя одинаково.

+0

Спасибо, что тестировали! Я не мог вспомнить, правильно ли он работал в 2012 году или нет. Я буду тестировать это для другого решения на работе (в 2008 году). Мое предсказание состоит в том, что я увижу такое же поведение. – 404compilernotfound

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 Definition и Find All References, начнут иметь смысл.

2

Недавно обновили до VS2013 и могут сообщить вам, что при нажатии на имя функции, где оно определено, опция «Найти все ссылки» используется для отображения всех мест в решении, в котором была вызвана функция. Теперь все это показывает вам тот, на который вы уже смотрите.

Передо мной теперь у меня есть строка 218: Public Shared Function MyNewFunction (тест ByVal As String)

Если я правой кнопкой мыши на MyNewFunction и выберите «Найти все ссылки» окно вывода говорит: «Найти Символ Результаты - 1 найдено ", и это одно и то же имя функции, номер файла и строки, как указано выше. Так что это бесполезно.

Если, конечно, есть какие-то скрытые настройки, которые мы еще не видели?

+0

Крейг, вы нашли решение? Вчера я перешел из VS2008 в VS2015, и я удивлен и разочарован, обнаружив, что «Найти все ссылки» сломан, точно так же, как вы описываете. Я испытываю желание вернуться к 2008 году! – Resource

0

Я столкнулся с аналогичной проблемой в VisualStudio 2010, где команда «Найти все ссылки» исчезла довольно долгое время при нормальном использовании.

Использование сочетаний клавиш отображает сообщение по линиям «недоступно в настоящее время», в то время как при попытке «Перейти к определению» отображается диалоговое окно с ошибкой.

Выход и повторное открытие Visual Studio не устранили проблему, и я не смог найти никаких настроек, которые могли бы изменить ситуацию.

Как ни странно, проблема была ограничена одним файлом исходного кода, а не другим.

Из любопытства I закрыл файл с исходным кодом, а затем повторно открыл его, дважды щелкнув файл в проводнике решений, и это устранило проблему.

Мое лучшее предположение, что что-то испортило кешированный индекс в файле, и, закрыв и снова открыв, предложила Visual Studio обновить этот кеш.

Смежные вопросы