2009-05-07 4 views
81

Я работаю в веб-проекте в Visual Studio 2008. Когда я нажму F12 (или щелкните правой кнопкой мыши и выберите «Перейти к определению»), Visual Studio последовательно переходит к Файл метаданных вместо перехода к исходному.«Перейти к определению» в Visual Studio вызывает только метаданные

Некоторые Очки:

  • Весь исходный код не C#, есть нет VB.Net
  • Все проекты находятся в одном растворе
  • Да, все это проект ссылка (проверено и проверено дважды)
  • Я попробовал Очистить/Восстановить Решение (даже до точки of clearin g из каталога Temp, Временный каталог файлов ASP.NET, и т. д.).

Кто-нибудь еще видел это поведение и/или знает, как его исправить?

+0

Я только имел этот вопрос в смешанных растворах с vb.net и C# в различных ссылочных проектов. Weird:/ –

+0

Единственное решение, которое я видел, находится по адресу: [http://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html](http:/ /johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html) – NotMe

ответ

48

Ну, другой разработчик нашел ответ. Конкретный проект, с которым мы столкнулись, первоначально был добавлен в качестве ссылки на файл, затем удален и добавлен в качестве ссылки на проект. Однако Visual Studio хранится в файле csproj для веб-сайта, что вызывает проблему. Он вошел и вручную отредактировал файл csproj, чтобы удалить ссылку на файл для проблемного проекта, и все теперь исправлено.

+0

Это отличная информация. Мне любопытно узнать, установлены ли у вас пакеты SP1? – NotMe

+0

ну, если бы я мог найти эту информацию в любом месте в Интернете, я бы сказал вам. Я запускаю VS 2008 9.0.21022.8 RTM, но я буду проклят, если найду где-нибудь, если это соответствует VS 2008 SP1 или оригиналу – pfunk

+0

Отлично, спасибо - мне это помогает. Это должно быть ProjectReference в файле csproj, если открыть его с помощью редактора text/xml. Любые другие должны быть удалены. –

-1

Лучше предположить, что у вас нет отладочной информации. Возможно, у вас есть несколько копий вашей сборки на диске, и у нее нет файла .pdb.

Выполняйте поиск имен вашей сборки из ваших проектов и удалите их все и перестройте.

+0

Даже с отладочной информацией это все еще случилось со мной. – Nuzzolilo

35

Это происходит, когда вы не добавляете ссылку в качестве проекта, а указываете на dll или exe, используя вкладку «Обзор» в диалоговом окне «Добавить ссылку». Если вы добавите ссылку, используя вкладку «Проекты», вы должны перейти непосредственно к исходному коду при выборе «Перейти к определению».

Однако, если вы установили ReSharper, вы перейдете к исходному коду, даже если вы добавили ссылку на dll/exe, используя вкладку «Обзор».

0
  1. нажмите на веб-сайте меню VS.
  2. Добавить ссылку ...
  3. Нажмите на вкладке проекта диалогового окна из
  4. Выберите DDL
  5. Нажмите на кнопку ОК
6

Visual Studio часто страдают от проблемы будет метаданным, а не ваш если вы переместите место, где вы строите проект, т. е. у вас может быть несколько версий для проверки.

Просто удалите ссылку и сразу же добавьте ее обратно, и все будет разобрано.

+0

Хорошее простое решение. – Zorgarath

2

Я понял, как решить свою проблему from this post, возможно, он также будет работать для некоторых из вас.

Я последовал за следующие действия:

  1. Закрыть решение.
  2. Удалить файл базы данных intellisense для решения: .ncb
  3. Открыть решение.
  4. Восстановить решение.

(я считаю, либо шаг 3 или 4 регенерирует файл базы данных IntelliSense, когда он отсутствует)

Intellisense, «идти в Defintion» и «найти все ссылки» должны работать снова.

1

Симптом:

Visual Studio 2010 Ultimate неоднократно не в состоянии найти ссылки на функцию, #defines, включает в себя, и т.д. при использовании «Перейти к определению» или «Перейти к объявлению» или «Найти все ссылки» функцию - странно работала Intellisense.

Fix:

  1. Закрыть Visual Studio
  2. Delete (переименовать, если вы хотите быть консервативным) решение .sdf файл
  3. Reopen Visual Studio

Файл SDF-будет автоматически перестраиваться путем анализа файлов-включений в вашем решении

+2

@alestanis Возможно, этот ответ не решил проблему для всех. – Nuzzolilo

+0

@alestanis У меня проблема в OP, но принятый ответ мне не помог .... Может быть, нам просто нужно удалить все вопросы, на которые есть принятый ответ? – Carl

6

Отмеченное решение n всегда работать. Вы должны убедиться, что указанный GUID проекта в файлах проекта является правильным GUID для проекта, который вы пытаетесь установить. В некоторых случаях Visual Studio позволяет им не синхронизироваться. Вы можете получить GUID проекта из файла проекта с помощью текстового редактора. Итак, если проект. Справочный проект B. Откройте проект B.csproj в текстовом редакторе, скопируйте GUID проекта из тега. Затем откройте проект A.csproj в текстовом редакторе и убедитесь, что вы используете правильный GUID. Найдите название проекта «B» в этом случае. Это должно быть. Замените идентификатор GUID в теге на правильный. Сохраните и перезагрузите. Конечно же, убедитесь, что ссылки на ваши проекты удалены. Вам нужны только ссылки на проекты.

1

Для меня решение GUID не работает, и я не смог найти файл .ncb. (Или, может быть, я ленив и не выглядел достаточно сложно, но это не важно.) Восстановление и перезапуск визуальной студии тоже не помогло.

То, что я сделал, это закрыть визуальную студию и удалить файлы .dll и .pdb, на которые ссылаются в верхней части файла метаданных, к которым привязывался мой intellisense. В моем случае это означало, что я удалил свою .dll и это .pdb-файл из Utilities/bin/Release. (Утилиты - это название проекта .dll, с которым у меня возникли проблемы.) Затем я перезапустил визуальную студию и перестроил .dll, а затем все решение. Больше проблем!

1

Просто нашел другую причину. Я обновил свой веб-проект до версии 4.0, но оставил библиотеки классов в версии 2.0. В этот момент все библиотеки классов в моем решении рассматривались как ссылки на файлы из моего веб-проекта. Может помочь кому-то еще ...

2

Удалите ссылочную dll, соберите (получите ошибки), ДОБАВИТЕ ссылку (вы удалили), затем снова создайте ... F12 на вашей функции затем должен работать (работал для меня).

0

В моем случае, я только недавно изменил

<mvcBuildViews> 

«истина» в файле .csproj моего сайта (найти ошибки компиляции в моих бритвенных просмотра файлов: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned+compile+errors+on+razor+syntax+error+in+asp+net+web+page+2+), и когда я затем построил I получал ошибки от моего в моем каталоге/obj/Debug /. Из любого из этих файлов (которые были устаревшими), щелкнув правой кнопкой мыши и выбрав «Перейти к определению», вы получите мне [метаданные].

Так что для меня ни одно из решений здесь не работало, потому что я не начинал с файла, который был на самом деле в моем проекте. Удалил весь каталог/obj/Debug /, ошибки ушли, и из любого нормального файла я могу правильно использовать Go To Definition.

3

Я убить все экземпляры VS, удалила Суо, запустить SLN и он работал на меня ...

+0

Это сработало для меня, спасибо! –

0

Я просто столкнулся с этой проблемой на VS 2013. Что-то я мог бы (сделал?) Не изолята изменение GUID в файле CSPROJ. Поскольку файлы CSPROJ отмечены в SVN, я не мог просто изменить GUID на моем локальном dev. Вместо этого я постоянно пересматривал SVN локальные изменения каждый раз, когда это происходило.

Во-первых, мне пришлось решить проблему с изменением GUID.

  1. Верните CSPROJ на зарегистрированную версию.
  2. Откройте CSPROJ через текстовый редактор, а не VS.
  3. Извлечь ценность из первозданного файла CSPROJ.

    {B1234567-5123-4AAE-FE43-8465767788ED}

  4. Откройте SLN файл с помощью текстового редактора, НЕ VS.

  5. Найдите ссылку на проект в решении.

    Проект ("{FAE12345-3210-1357-B3EB-00CA4F396F7C}") = "Some.Project", ".... \ assemblylies \ Some.Project \ Some.Project.csproj", "{B7654321- 5321-4AAE-FE3D-ED20900088ED} " EndProject

  6. Первый идентификатор GUID указан GUID решения. Для каждого проекта, указанного в вашем SLN, вы должны увидеть это значение, повторенное в первом аргументе. GUID, следующий за .csproj, - это тот, который вы хотите заменить оригинальным GUID.

Это должно решить первую проблему, но посадка «Перейти к определению» в метаданных не решена. В нашем файле SLN есть мастер-проект (наш веб-сайт), поэтому его запись в файле SLN должна содержать запись ProjectSection с несколькими значениями GUID. Вот пример:

ProjectSection(ProjectDependencies) = postProject 
{AC50D230-24C4-4DCA-BAAD-355E6AF5EFBD} = {AC50D230-24C4-4DCA-BAAD-355E6AF5EFBD} 
EndProjectSection 

Обратите внимание, что отсутствующий идентификатор GUID в этой коллекции является тем, который был из моего первозданного проекта.

  1. Добавить отсутствующий идентификатор GUID в качестве последней записи между ProjectSection и EndProjectSection. Формат выглядит как строка, и это {GUID} = {GUID}.
  2. Сохраните файл.
  3. Откройте свое решение.
  4. Щелкните правой кнопкой мыши ссылку в новом проекте и выберите «Перейти к определению».
0

У меня было круглые ссылки между двумя задействованными проектами (что нет-нет). Мне пришлось немного изменить структуру кода, чтобы решить эту проблему, поскольку оба проекта действительно зависели друг от друга. Удаление одной из ссылок решало проблему intellisense. Это было логически ошибочно, и я, вероятно, не заметил бы этой ошибки!

0

Это один работал для меня:

  1. правой кнопки мыши на DLL в опорной папке в решении исследователя
  2. Удалить файл DLL
  3. правой кнопки мыши в справочной папке, затем
  4. Добавить ссылку к файлу dll снова
26

Похоже, что его необходимо настроить и в Resharper. Моя Visual Studio не переходит к исходному коду .NET Framework, пока я не включу его в Resharper.

Resharper settings to allow navigate to external source

+1

Привет, это работает для меня. Он решил эту проблему. Использование обновления VS2015 3, ReSharper 2016.1.2 – Michal

0

Я сталкивался с таким же вопросом и один из коллег дал мне следующее решение, и это сработало! Если ни один из вышеперечисленных работ для вас,

  1. Удалить все ссылки и добавить их обратно (не убедитесь, что путь правильно)
  2. Перейти к Solution свойства и перепроверять проекта зависимостей все проекты. Убедитесь, что проект, который вы будете использовать , будет добавлен в качестве зависимого в проекте, в котором вы работаете .
2

1. закрыть решение.

2. удаления скрытых <name of the solution> .sou файл в папке, в которой существует <name of the solution> .sln файл вашего раствора.

3. откройте решение.

4. Восстановите свое решение.

1

Я сделал все предложенные шаги, но ничего не изменилось, то
наконец правая кнопка мыши и добавить ссылку в меню, вкладки проекта

  1. просто невыбранная ссылка проект.
  2. Сохраните решение.
  3. выберите тот же проект.
  4. Восстановить решение.

Задача отсортирована. Надеюсь, это поможет кому-то.

1

В моем случае (с использованием Visual Studio Professional 2015), когда я отключил конструктор XAML, F12 перестала работать. Как только я вернусь к изменениям и перезапущу Visual Studio, F12 снова работал.

Проверен шаблон несколько раз для подтверждения, а затем опубликован. Надеюсь, это поможет кому-то.

0

Для тех, кто использует VS 2017 (я в версии 15.3.4 в данный момент) здесь простые шаги:

  1. Откройте свое решение в проводнике Windows и закройте Visual Studio
  2. В меню проводника выберите View и убедитесь, что флажок «Скрытые элементы» отмечен
  3. Перейдите в подпапку .vs\[your solution name]\v15
  4. Удалить .suo файл
  5. Restart VS и построить ваше решение

Это исправлено для меня: F12 открыл фактический исходный файл, а не версию «из метаданных».

0

Ниже шаги работали для меня.

  1. Перейти к .csproj файлу
  2. открыть его в блокноте Перейти к строке, где длл называется. <Reference Include="">
  3. удалить строку

    <SpecificVersion>False</SpecificVersion> 
    or 
    <SpecificVersion>True</SpecificVersion> 
    
Смежные вопросы