"Go To Definition" di Visual Studio hanya memunculkan Metadata

132

Saya bekerja di Proyek Web di Visual Studio 2008. Ketika saya menekan F12 (atau klik kanan dan pilih Go To Definition) Visual Studio secara konsisten pergi ke file Metadata bukannya pergi ke sumber.

Beberapa Poin:

  • Semua kode sumbernya adalah C #, tidak ada VB.Net
  • Semua proyek berada dalam solusi yang sama
  • Semuanya adalah referensi proyek yang bertentangan dengan referensi file (dicentang dan diperiksa ulang)
  • Saya telah mencoba pendekatan Clean / Rebuild Solution (bahkan sampai membersihkan direktori Temp, direktori Temporary ASP.NET Files, dll).

Adakah orang lain yang melihat perilaku ini dan / atau tahu cara memperbaikinya?

pfunk
sumber
Saya hanya punya masalah ini dalam solusi campuran dengan vb.net dan c # dalam proyek referensi yang berbeda. Aneh: /
Bayard Randel
Satu-satunya solusi yang pernah saya lihat adalah di: http://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html
NotMe
Bagi saya restart Visual Studio memperbaiki masalah ini (pada proyek .net Core dalam solusi multi proyek).
niico

Jawaban:

59

Nah, pengembang lain menemukan jawabannya. Proyek khusus yang kami miliki masalah awalnya ditambahkan sebagai referensi file, kemudian dihapus dan ditambahkan sebagai Referensi Proyek. Namun Visual Studio, menyimpan keduanya dalam file csproj untuk situs web, menyebabkan masalah. Dia masuk dan secara manual mengedit file csproj untuk menghapus referensi file ke proyek masalah dan semua sudah diperbaiki sekarang

pfunk
sumber
Ini adalah informasi yang bagus untuk dimiliki. Saya ingin tahu apakah kalian sudah menginstal SP1?
NotMe
baik, jika saya dapat menemukan informasi itu di mana saja di web saya akan memberi tahu Anda. Saya menjalankan VS 2008 9.0.21022.8 RTM, tetapi saya akan terkutuk jika saya dapat menemukan di mana saja jika itu sesuai dengan VS 2008 SP1 atau asli
pfunk
Bagus, terima kasih - ini membantu saya. Itu harus ProjectReference dalam file csproj jika membukanya menggunakan editor teks / xml. Yang lain harus dihapus.
Victor Gelmutdinov
3
Ini juga dapat terjadi jika GUID dalam ProjectReference tidak cocok dengan nilai ProjectGuid dalam proyek yang dirujuk
David Gardiner
Terima kasih! Masalah-masalah semacam ini masih bertahan di MSVS
Alex
42

Ini terjadi ketika Anda tidak menambahkan referensi sebagai proyek tetapi arahkan ke dll atau exe menggunakan tab Browse di dialog Add Reference. Jika Anda menambahkan referensi menggunakan tab Projects Anda harus langsung pergi ke kode sumber ketika Anda memilih Go To Definition.

Namun, jika Anda menginstal ReSharper , Anda akan pergi ke kode sumber bahkan jika Anda menambahkan referensi Anda ke dll / exe menggunakan tab Browse.

Vadim
sumber
39

Sepertinya perlu diatur di Resharper juga. Studio Visual saya tidak menavigasi ke kode sumber .NET Framework sampai saya mengaktifkannya di Resharper.

Atur kembali pengaturan untuk memungkinkan navigasi ke sumber eksternal

Jeson Martajaya
sumber
1
Hai, ini bekerja untuk saya. Itu memecahkan masalah itu. Menggunakan VS2015 Pembaruan 3, ReSharper 2016.1.2
Michal
25

1. tutup solusi Anda.

2. hapus <name of the solution>file .suo tersembunyi di folder tempat file .sln solusi Anda <name of the solution>ada.

3. buka solusi Anda.

4. membangun kembali solusi Anda.

Ali Sadri
sumber
7
Ini adalah opsi yang bekerja untuk saya. Namun, saya menggunakan VS2019 RC (16.0.0) dan harus menghapus file .sou di .vs \ {ProjectName} \ v16
Nick DeVore
1
Membersihkannya untukku juga. Menggunakan VS2017, file .sou berada di beberapa lokasi - ".vs \ <ProjectName> \ v15", seperti Nick yang mencatat file VS2019 .sou berada di subdirektori V16. Perhatikan bahwa saya juga memiliki subdir "... V14", tampaknya dari VS2015 sebelumnya yang saya gunakan pada Solusi yang sama sebelum memutakhirkan ke 2017. Membersihkan keduanya dan semua masalah hilang.
BRebey
1
* .suo not .sou adalah ekstensi file yang sebenarnya
Mike Cheel
1
Sama di Visual Studio 2019. Tutup solusi, buka solusi di file explorer, cari file .suo, dan hapus semuanya. Buka kembali solusinya dan berfungsi lagi.
yesman
Opsi ini bekerja untuk saya, terima kasih. Untuk VS2019 hapus folder vs dan buka proyek
Ashi
21

Bagi yang menggunakan VS 2017 (saya di versi 15.3.4 saat ini) di sini adalah langkah-langkah sederhana:

  1. Buka solusi Anda di Windows Explorer dan tutup Visual Studio
  2. Di menu penjelajah, pilih Lihat dan pastikan bahwa kotak centang "Item tersembunyi" ditandai
  3. Arahkan ke subfolder .vs\[your solution name]\v15
  4. Hapus .suofile
  5. Mulai ulang VS dan bangun solusi Anda

Itu memperbaikinya bagi saya: F12 membuka file sumber yang sebenarnya, bukan versi "from metadata".

BCA
sumber
Seperti disebutkan dalam komentar di tempat lain, direktori tersebut adalah v16 jika Anda menjalankan VS2019.
Otis
10

Visual studio sering menderita masalah pergi ke metadata daripada proyek Anda jika Anda menggeser lokasi di mana Anda membangun proyek, yaitu Anda mungkin memiliki beberapa versi untuk menguji berbagai hal.

Cukup hapus referensi dan segera tambahkan kembali dan semuanya akan beres.

Andrew
sumber
8

Solusi yang ditandai tidak selalu berhasil. Anda harus memastikan bahwa GUID proyek yang direferensikan dalam file proyek adalah GUID yang benar untuk proyek yang Anda coba referensi. Visual Studio memang memungkinkan mereka untuk keluar dari sinkronisasi dalam beberapa keadaan. Anda bisa mendapatkan GUID proyek dari file proyek dengan editor teks. Jadi jika proyek A proyek referensi B. Buka proyek B.csproj dalam editor teks, salin GUID proyek dari tag. Kemudian buka proyek A.csproj di editor teks, dan pastikan Anda menggunakan GUID yang benar. Cari nama proyek "B" dalam kasus ini. Itu harus di. Ganti GUID dalam tag dengan yang benar. Simpan dan muat ulang. Tentu saja juga pastikan referensi berbasis file untuk proyek Anda dihapus. Anda hanya ingin referensi proyek.

Kaya
sumber
6

Saya telah membunuh semua instance VS, menghapus SUO, meluncurkan sln dan itu berhasil untuk saya ...

sejuk
sumber
Saya mengalami crash msbuild yang tidak terduga, dan berbagai masalah muncul setelahnya termasuk yang ini. Ini menyelesaikan masalah. Aneh.
Chris Lukic
3

Hapus dll referensi, Bangun (akan mendapatkan kesalahan), TAMBAHKAN referensi (Anda dihapus) kemudian bangun lagi ... F12 pada fungsi Anda kemudian harus bekerja (bekerja untuk saya).

Shinigami302
sumber
2

Saya menemukan cara untuk menyelesaikan masalah saya dari posting ini , mungkin itu juga akan berhasil untuk sebagian dari Anda.

Saya mengikuti langkah-langkah ini:

  1. Tutup solusinya.
  2. Hapus file database intellisense untuk solusinya: .ncb
  3. Buka solusinya.
  4. Bangun kembali solusi.

(Saya percaya langkah 3 atau 4 meregenerasi file database Intellisense ketika hilang)

Intellisense, "buka definisi" dan "temukan semua referensi" harus berfungsi lagi.

jiangping
sumber
2

Dalam kasus saya, (menggunakan Visual Studio Professional 2015), ketika saya telah menonaktifkan desainer XAML, F12 berhenti bekerja. Segera setelah saya mengembalikan perubahan, dan me-restart Visual Studio, F12 bekerja lagi.

Memeriksa pola beberapa kali untuk mengonfirmasi dan kemudian memposting. Semoga ini bisa membantu seseorang.

JulyOrdinary
sumber
1

Gejala:

Visual Studio 2010 Ultimate berulang kali gagal menemukan referensi ke fungsi, #defines, termasuk, dll ketika menggunakan fitur "Go To Definition" atau "Go To Declaration" atau "Find All Reference" - anehnya Intellisense bekerja.

Memperbaiki:

  1. Tutup Visual Studio
  2. Hapus (ganti nama jika Anda ingin menjadi konservatif) solusi .sdf file
  3. Buka kembali Visual Studio

File .sdf akan secara otomatis dibangun kembali dengan mem-parsing file yang disertakan dalam solusi Anda

Neoheurist
sumber
2
@ alestanis Mungkin jawaban itu tidak menyelesaikan masalah untuk semua orang.
nuzzolilo
@ alestan Saya punya masalah di OP, tetapi jawaban yang diterima tidak membantu saya .... Mungkin kita harus menghapus semua pertanyaan yang memiliki jawaban yang diterima?
Carl
1

Bagi saya, solusi GUID tidak berfungsi dan saya tidak dapat menemukan file .ncb saya. (Atau mungkin saya malas dan tidak terlihat cukup keras, tapi itu tidak penting.) Membangun kembali dan memulai kembali studio visual juga tidak membantu.

Apa yang saya lakukan adalah menutup visual studio dan menghapus .dll dan .pdb yang direferensikan di bagian atas file Meta Data yang terus terhubung dengan intellisense saya. Dalam kasus saya itu berarti saya menghapus .dll dan .pdb file dari Utilities / bin / Release. (Utilitas adalah nama proyek .dll yang bermasalah dengan saya.) Kemudian saya memulai kembali studio visual dan membangun kembali .dll lalu seluruh solusi. Tidak ada lagi masalah!

nicholeous
sumber
1

Baru saja menemukan penyebab lain. Saya memutakhirkan proyek web saya ke 4.0 tetapi meninggalkan perpustakaan kelas pada 2.0. Pada titik itu semua perpustakaan kelas dalam solusi saya diperlakukan sebagai referensi file dari proyek web saya. Mungkin bisa membantu orang lain ...

Tracyd
sumber
1

Saya menghadapi masalah yang sama dan salah satu kolega memberi saya solusi berikut dan berhasil! Jika tidak ada di atas yang bekerja untuk Anda,

  1. Hapus semua referensi dan tambahkan kembali (pastikan jalurnya benar)
  2. Pergi ke properti Solusi , dan periksa kembali Ketergantungan Proyek dari semua proyek. Pastikan proyek yang akan Anda gunakan ditambahkan sebagai tanggungan dalam proyek yang sedang Anda kerjakan.
chamodiadikaram
sumber
1

Saya melakukan semua langkah yang disarankan tetapi tidak ada yang berubah kemudian
akhirnya klik kanan dan tambahkan menu referensi, tab proyek

  1. cukup tidak memilih proyek referensi.
  2. simpan solusinya.
  3. pilih proyek yang sama.
  4. Bangun kembali solusi.

Masalah diurutkan. Semoga ini bisa membantu seseorang.

sansalk
sumber
1

Langkah-langkah di bawah ini berhasil untuk saya.

  1. Buka file .csproj
  2. Buka di Notepad. Pergi ke garis di mana dll disebut.<Reference Include="">
  3. Hapus garis

    <SpecificVersion>False</SpecificVersion> 
    or 
    <SpecificVersion>True</SpecificVersion>
    
Varun Verma
sumber
1

Setelah menghapus file dll dari Visual Studio terlebih dahulu dan menambahkannya kembali secara manual dari Solution Explorer -> Situs Web -> Tambah -> Referensi dan mengaktifkan Aplikasi 32-bit di IIS memperbaikinya untuk saya.

Marek Konsa
sumber
1

# 1

Periksa "Lihat - Obyek Browser" dan jika Anda melihat lebih dari satu unit dengan nama yang sama - itulah sebabnya Anda mendapatkan kesalahan ini.

Bagi kami itu adalah bug di VS 2019:

Jika Anda memiliki ASP.NET "Razor helpers" di App_Codefolder, Visual Studio 2019 menafsirkannya sebagai rakitan yang berbeda tetapi dengan nama yang sama, yang menyembunyikan rakitan yang sebenarnya.

Tidak ada perbaikan untuk itu selain menulis ulang bantuan tersebut ke tampilan sebagian atau HTML pembantu (Anda harus tetap melakukannya jika Anda berencana untuk bermigrasi ke .NET Core).

Lihat pemecahan masalah ini di situs MS dan harap perbaiki bug di sana sehingga MS memperbaikinya

https://developercommunity.visualstudio.com/solutions/1008795/view.html (harap upvote)

# 2

Alasan lain mengapa perakitan yang sama dapat dimuat dua kali dalam browser objek adalah jika Anda memiliki proyek unit-test yang memulai proses iis-express dan tidak pernah membunuhnya dengan benar.

Alex
sumber
0
  1. klik menu situs web dari VS.
  2. Tambahkan referensi ...
  3. Klik pada tab proyek dari kotak dialog
  4. Pilih ddl
  5. Klik pada tombol ok
Tatoba
sumber
0

Dalam kasus saya, saya baru saja berubah

<mvcBuildViews>

menjadi "true" di file .csproj situs saya (untuk menemukan kesalahan kompilasi dalam file tampilan Razor saya: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned + kompilasi + kesalahan + pada + silet + sintaks + kesalahan + di + asp + net + web + halaman + 2 + ), dan ketika saya membangun saya mendapatkan kesalahan dari direktori direktori / obj / Debug / situs saya. Dari semua file itu (yang kedaluwarsa), mengklik kanan dan memilih "Go To Definition" akan memberi saya versi [metadata].

Jadi bagi saya, tidak ada solusi di sini yang berfungsi, karena saya tidak memulai dari file yang sebenarnya ada di proyek saya. Dihapus seluruh direktori / obj / Debug /, kesalahan hilang, dan dari file normal saya dapat menggunakan Go To Definition dengan benar.

DaveD
sumber
0

Saya baru saja mengalami masalah ini pada VS 2013. Sesuatu yang saya (tidak bisa) isolasi tidak mengubah GUID dalam file CSPROJ. Karena file CSPROJ diperiksa ke dalam SVN, saya tidak bisa begitu saja mengubah GUID pada dev lokal saya. Sebaliknya, saya terus-menerus SVN mengembalikan perubahan lokal setiap kali itu terjadi.

Pertama, saya harus menyelesaikan masalah GUID yang berubah.

  1. Kembalikan CSPROJ ke versi check-in.
  2. Buka CSPROJ melalui editor teks, BUKAN VS.
  3. Ekstrak nilai dari file CSPROJ yang masih asli.

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

  4. Buka file SLN melalui editor teks, BUKAN VS.

  5. Temukan referensi Proyek dalam solusi.

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

  6. GUID pertama yang terdaftar adalah GUID Solusi. Untuk setiap proyek yang dirujuk dalam SLN Anda, Anda harus melihat nilai ini diulang pada argumen pertama. GUID yang mengikuti .csproj adalah yang ingin Anda ganti dengan GUID yang asli.

Ini harus menyelesaikan masalah pertama, tetapi pendaratan "Masuk ke Definisi" dalam data meta tidak terpecahkan. Dalam file SLN kami, ada proyek master (situs web kami), jadi entri dalam file SLN harus berisi entri ProjectSection dengan beberapa nilai GUID. Berikut ini sebuah contoh:

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

Perhatikan bahwa GUID yang hilang dalam koleksi ini adalah dari proyek awal saya.

  1. Tambahkan GUID yang hilang sebagai entri terakhir antara ProjectSection dan EndProjectSection. Formatnya tampaknya per-baris, dan itu {GUID} = {GUID}.
  2. Simpan file.
  3. Buka solusi Anda.
  4. Klik kanan referensi di proyek yang baru ditambahkan dan "Pergi ke Definisi."
gregsonian
sumber
0

Saya memiliki referensi melingkar antara dua proyek yang terlibat (yang merupakan no-no). Harus merestrukturisasi kode saya sedikit untuk menyelesaikannya karena kedua proyek benar-benar saling bergantung. Menghapus salah satu referensi memecahkan masalah intellisense. Secara logika cacat dan saya mungkin tidak akan menyadarinya tanpa kesalahan ini!

kad81
sumber
0

Yang ini bekerja untuk saya:

  1. Klik kanan dll di folder referensi di penjelajah solusi Anda
  2. Hapus file dll
  3. Klik kanan folder Referensi, lalu
  4. Tambahkan referensi ke file dll lagi
jemgaleon
sumber
0

Ini dapat terjadi jika Anda mencoba untuk melompat ke definisi dalam proyek yang telah dibongkar (Tidak tersedia). Klik kanan proyek yang dibongkar dan pilih "Muat Ulang Proyek".

teman sekamar
sumber
-1

Tebakan terbaik adalah Anda tidak memiliki informasi debug. Mungkin Anda memiliki banyak salinan rakitan di disk dan tidak memiliki file .pdb.

Lakukan pencarian untuk nama-nama majelis Anda dari proyek Anda dan hapus semuanya dan bangun kembali.

Robert Kozak
sumber