Visual Studioの「Go To Definition」はメタデータのみを表示します


132

Visual Studio 2008のWebプロジェクトで作業しています。F12キーを押すと(または右クリックして[定義に移動]を選択すると)、Visual Studioはソースではなく常にメタデータファイルに移動します。

いくつかのポイント:

  • すべてのソースコードはC#であり、VB.Netはありません
  • すべてのプロジェクトは同じソリューションにあります
  • ファイル参照ではなく、すべてがプロジェクト参照です(チェックおよびダブルチェック)。
  • Clean / Rebuild Solutionアプローチを試しました(Tempディレクトリ、Temporary ASP.NET Filesディレクトリなどをクリアするまで)。

他の誰かがこの動作を見たり、修正する方法を知っていますか?


この問題は、異なる参照プロジェクトのvb.netとc#を使用した混合ソリューションでのみ発生しました。奇妙:/
ランデル

私が見た唯一の解決策は次の場所にあります:http
//johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html

私にとってVisual Studioを再起動すると、この問題が修正されました(マルチプロジェクトソリューション内の.net Coreプロジェクトで)。
niico 2018

回答:


59

さて、別の開発者が答えを見つけました。問題が発生した特定のプロジェクトは、最初はファイル参照として追加され、その後削除されてプロジェクト参照として追加されました。ただし、Visual Studioは両方をWebサイトのcsprojファイルに保持しているため、問題が発生します。彼は入り、csprojファイルを手動で編集して問題のプロジェクトへのファイル参照を削除し、すべてが修正されました


これはすばらしい情報です。SP1がインストールされているかどうか知りたいです。
NotMe 2009年

まあ、もし私がウェブ上のどこにでもその情報を見つけることができたら、私はあなたに伝えます。私はVS 2008 9.0.21022.8 RTMを実行していますが、それがVS 2008 SP1またはオリジナルに対応している場合にどこかで見つけることができると、私はのろわれます
pfunk

ありがとう、これは私を助けます。text / xmlエディターを使用して開く場合、csprojファイルのProjectReferenceである必要があります。その他は削除する必要があります。
Victor Gelmutdinov 2010年

3
これは、ProjectReferenceのGUIDが参照プロジェクトのProjectGuid値と一致しない場合にも発生する可能性があります
David Gardiner

ありがとう!これらの種類の問題は、MSVSでも引き続き発生します
Alex

42

これは、プロジェクトとして参照を追加せず、[参照の追加]ダイアログの[参照]タブを使用してdllまたはexeを指す場合に発生します。[プロジェクト]タブを使用して参照を追加する場合は、[Go To Definition]を選択したときに直接ソースコードに移動する必要があります。

ただし、ReSharperをインストールすると、[参照]タブを使用してdll / exeへの参照を追加した場合でも、ソースコードに移動します。


39

Resharperでも設定する必要があるようです。Visual Studioは、Resharperで有効にするまで.NET Frameworkソースコードに移動しません。

外部ソースへのナビゲートを可能にするリシャーパー設定


1
こんにちは。それはその問題を解決しました。VS2015 Update 3、ReSharper 2016.1.2を使用
Michal

25

1.ソリューションを閉じます。

2.<name of the solution>ソリューションの<name of the solution>.slnファイルが存在するフォルダー内の非表示の.suoファイルを削除します。

3.ソリューションを開きます。

4.ソリューションを再構築します。


7
これは私にとって有効なオプションでした。ただし、私はVS2019 RC(16.0.0)を使用しており、.vs \ {ProjectName} \ v16にある.souファイルを削除する必要がありました
Nick DeVore

1
私もそれを片付けました。VS2017を使用すると、NickがVS2019の.souファイルがV16サブディレクトリにあると述べたように、.souファイルは複数の場所にありました-".vs \ <ProjectName> \ v15"。2017年にアップグレードする前に同じソリューションで使用していた以前のVS2015からの「... V14」サブディレクトリもあったことに注意してください。両方をクリーンアップし、すべての問題が解消されました。
BRebey

1
* .souではなく.suoが実際のファイル拡張子
Mike Cheel

1
Visual Studio 2019でも同じです。ソリューションを閉じ、ファイルエクスプローラーでソリューションを開き、.suoファイルを検索して、すべて削除します。ソリューションを再度開くと、再び機能します。
イェスマン

このオプションは私のために働いた、ありがとう。VS2019の場合、vsフォルダーを削除してプロジェクトを開きます
Ashi

21

VS 2017を使用している場合(現時点ではバージョン15.3.4です)、簡単な手順は次のとおりです。

  1. Windowsエクスプローラーでソリューションを開き、Visual Studioを閉じます
  2. エクスプローラメニューで[表示]を選択し、[非表示のアイテム]チェックボックスがオンになっていることを確認します
  3. サブフォルダーに移動します .vs\[your solution name]\v15
  4. .suoファイルを削除する
  5. VSを再起動してソリューションを構築する

F12で、「メタデータから」バージョンではなく、実際のソースファイルが開かれました。


他の場所のコメントで述べたように、VS2019を実行している場合、ディレクトリはv16です。
Otis

10

Visual Studioは、プロジェクトを構築している場所を移動すると、プロジェクトではなくメタデータに移動するという問題に悩まされることがよくあります。つまり、いくつかのバージョンでテストを行うことができます。

参照を削除してすぐに追加し直すだけで、すべてがソートされます。


8

マークされたソリューションが常に機能するとは限りません。プロジェクトファイルで参照されているプロジェクトGUIDが、参照しようとしているプロジェクトの正しいGUIDであることを確認する必要があります。Visual Studioでは、状況によっては同期が取れなくなる場合があります。テキストエディターを使用して、プロジェクトファイルからプロジェクトGUIDを取得できます。したがって、プロジェクトAがプロジェクトBを参照している場合、テキストエディターでプロジェクトB.csprojを開き、タグからプロジェクトGUIDをコピーします。次に、プロジェクトA.csprojをテキストエディターで開き、正しいGUIDを使用していることを確認します。この場合、プロジェクト名「B」を検索します。にあるはずです。タグのGUIDを正しいものに置き換えます。保存して再読み込みします。もちろん、プロジェクトへのファイルベースの参照が削除されていることも確認してください。プロジェクト参照のみが必要です。


6

すべてのVSインスタンスを終了し、SUOを削除してslnを起動しました。


予期しないmsbuildクラッシュが発生し、その後、これを含むさまざまな問題が発生しました。これで問題は解決しました。変だ。
Chris Lukic

3

参照DLLを削除し、ビルド(エラーが発生します)、参照を追加(削除)してから、再度ビルドします。関数のF12が機能するはずです(私のために機能しました)。


2

はこの投稿から私の問題を解決する方法を見つけました、おそらくそれはあなたの一部でもうまくいくでしょう。

私はこれらのステップに従いました:

  1. ソリューションを閉じます。
  2. ソリューションのインテリセンスデータベースファイルを削除します:.ncb
  3. ソリューションを開きます。
  4. ソリューションを再構築します。

(ステップ3または4のいずれかが欠落していると、インテリセンスデータベースファイルが再生成されると思います)

Intellisense、「定義に移動」および「すべての参照を検索」が再び機能するはずです。


2

私の場合(Visual Studio Professional 2015を使用)、XAMLデザイナーを無効にすると、F12が機能しなくなりました。変更を元に戻し、Visual Studioを再起動するとすぐに、F12が再び機能しました。

パターンを複数回チェックして確認し、投稿しました。それが誰かを助けることを願っています。


1

症状:

Visual Studio 2010 Ultimateは、「定義へ移動」、「宣言へ移動」、または「すべての参照を検索」機能を使用すると、関数、#defines、インクルードなどへの参照の検索に繰り返し失敗しました-奇妙なことにIntellisenseが機能していました。

修正:

  1. Visual Studioを閉じる
  2. ソリューションの.sdfファイルを削除(保守的にしたい場合は名前を変更)
  3. Visual Studioを再度開く

.sdfファイルは、ソリューションのインクルードファイルを解析することで自動的に再構築されます


2
@alestanis多分その答えは皆のための問題を解決しませんでした。
nuzzolilo

@alestanis OPに問題がありますが、受け入れられた回答は役に立ちませんでした...おそらく、受け入れられた回答を持つすべての質問を削除する必要がありますか?
Carl

1

私にとって、GUIDソリューションは機能せず、.ncbファイルが見つかりませんでした。(または、私は怠惰で十分に難しく見えなかったかもしれませんが、それは重要ではありません。)Visual Studioを再構築して再起動しても効果がありませんでした。

私が行ったのは、ビジュアルスタジオを閉じて、IntelliSenseがリンクし続けているメタデータファイルの先頭で参照されている.dllと.pdbを削除することでした。私の場合、それは私が私の.dllを削除したことを意味し、それはUtilities / bin / Releaseから.pdbファイルです。(Utilitiesは、問題があった.dllプロジェクトの名前です。)次に、Visual Studioを再起動し、.dllを再構築してから、ソリューション全体を再構築しました。もう問題ありません!


1

ちょうど別の原因が見つかりました。Webプロジェクトを4.0にアップグレードしましたが、クラスライブラリを2.0のままにしました。その時点で、私のソリューションのすべてのクラスライブラリは、私のWebプロジェクトからのファイル参照として扱われました。他の誰かを助けるかもしれない...


1

私は同じ問題に直面し、同僚の一人が私に次の解決策を与えてくれました、そしてそれはうまくいきました!上記のいずれもうまくいかない場合は、

  1. すべての参照を削除して追加し直します(パスが正しいことを確認してください)
  2. ソリューションのプロパティに移動し、すべてのプロジェクトのプロジェクトの依存関係を再確認します。使用するプロジェクトが、作業中のプロジェクトの依存プロジェクトとして追加されていることを確認してください。

1

私はすべての提案された手順を実行しましたが、何も変更されておらず、
最後に右クリックして参照メニュー、プロジェクトタブを追加しました

  1. 参照プロジェクトの選択を解除するだけです。
  2. ソリューションを保存します。
  3. 同じプロジェクトを選択します。
  4. ソリューションを再構築します。

問題をソートしました。これが誰かに役立つことを願っています。


1

以下の手順は私のために働きました。

  1. .csprojファイルに移動
  2. それをメモ帳で開きます。dllが参照されている行に移動します。<Reference Include="">
  3. 行を削除

    <SpecificVersion>False</SpecificVersion> 
    or 
    <SpecificVersion>True</SpecificVersion>
    

1

最初にVisual Studioからdllファイルを削除し、ソリューションエクスプローラー-> Webサイト->追加->参照から手動でそれらを追加し直して、IISで32ビットアプリケーションを有効にすると問題が解決しました。


1

#1

[表示-オブジェクトブラウザ]をチェックし、同じ名前のアセンブリが複数表示されている場合-このため、このエラーが発生します。

私たちにとっては、VS 2019のバグでした:

ASP.NETの「Razorヘルパー」を使用している場合 App_Codeフォルダーに、Visual Studio 2019はそれを別のアセンブリとして解釈ますが、同じ名前で、実際のアセンブリを非表示にします。

これらのヘルパーを部分的なビューまたはHTMLヘルパーに書き換える以外に修正はありません(.NET Coreへの移行を計画している場合は、とにかく行う必要があります)。

MSのサイトでこの回避策を参照し、そこでバグを賛成して、MSが修正するようにしてください。

https://developercommunity.visualstudio.com/solutions/1008795/view.html(投票してください)

#2

オブジェクトブラウザーで同じアセンブリを2回読み込むことができるもう1つの理由は、iis-expressプロセスを開始してそれを適切に強制終了しない単体テストプロジェクトがある場合です。


0
  1. VSのWebサイトメニューをクリックします。
  2. 参照を追加...
  3. ダイアログボックスからプロジェクトタブをクリックします
  4. ddlを選択
  5. [OK]ボタンをクリックします

0

私の場合、私は最近変わったばかりです

<mvcBuildViews>

サイトの.csprojファイルで「true」に設定します(Razorビューファイルでコンパイルエラーを見つけるには: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 +)、そしてビルドすると、サイトの/ obj / Debug /ディレクトリ内からエラーが発生しました。これらのファイル(古いもの)を右クリックして[定義に移動]を選択すると、[メタデータ]バージョンが表示されます。

したがって、私にとっては、実際には自分のプロジェクトにあるファイルから始めていなかったため、ここでの解決策はどれも機能しませんでした。/ obj / Debug /ディレクトリ全体を削除し、エラーはなくなりました。通常のファイルからは、[Go To Definition]を正しく使用できます。


0

私はVS 2013でこの問題に遭遇しました。分離できなかった(できなかった)何かが、CSPROJファイルのGUIDを変更していました。CSPROJファイルがSVNにチェックインされているため、ローカル開発のGUIDを変更することはできませんでした。代わりに、私は常にローカルの変更が発生するたびにSVNを元に戻していました。

まず、変化するGUIDの問題を解決する必要がありました。

  1. CSPROJをチェックインバージョンに戻します。
  2. VSではなく、テキストエディタでCSPROJを開きます。
  3. 初期のCSPROJファイルから値を抽出します。

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

  4. VSではなくテキストエディタでSLNファイルを開きます。

  5. ソリューションでプロジェクト参照を見つけます。

    Project( "{FAE12345-3210-1357-B3EB-00CA4F396F7C}")= "Some.Project"、 ".... \ assemblies \ Some.Project \ Some.Project.csproj"、 "{B7654321-5321-4AAE- FE3D-ED20900088ED} "EndProject

  6. リストされている最初のGUIDはソリューションGUIDです。SLNで参照されるすべてのプロジェクトについて、最初の引数でこの値が繰り返されているのがわかります。.csprojに続くGUIDは、初期のGUIDで置き換えるものです。

これは最初の問題を解決するはずですが、メタデータの「定義へ移動」ランディングは解決されません。私たちのSLNファイルにはマスタープロジェクト(私たちのWebサイト)があるため、SLNファイルのエントリには、複数のGUID値を持つProjectSectionエントリが含まれている必要があります。次に例を示します。

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

このコレクションに欠落しているGUIDは、私の初期のプロジェクトのものです。

  1. ProjectSectionとEndProjectSectionの間の最後のエントリとして、不足しているGUIDを追加します。形式は行ごとに表示され、{GUID} = {GUID}です。
  2. ファイルを保存します。
  3. ソリューションを開きます。
  4. 新しく追加したプロジェクトの参照を右クリックし、[定義に移動]をクリックします。

0

私が持っていた円形の基準(NO-NOである)関与する2つのプロジェクト間を。両方のプロジェクトは互いに本当に依存していたため、コードを少し再構成して解決する必要がありました。参照の1つを削除すると、インテリセンスの問題が解決しました。それは論理的に欠陥があり、おそらくこのエラーがなければ気付かなかっただろう!


0

これは私のために働きました:

  1. ソリューションエクスプローラーの参照フォルダーでDLLを右クリックします。
  2. DLLファイルを削除
  3. 参照フォルダを右クリックして、
  4. dllファイルへの参照を再度追加します

0

これは、アンロードされたプロジェクト(使用不可)の定義にジャンプしようとした場合に発生する可能性があります。アンロードしたプロジェクトを右クリックして、「プロジェクトの再読み込み」を選択します。


-1

最良の推測は、デバッグ情報がないことです。おそらく、ディスク上にアセンブリの複数のコピーがあり、それに.pdbファイルがありません。

プロジェクトからアセンブリ名を検索し、それらをすべて削除して再ビルドします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.