“ ไปที่คำจำกัดความ” ใน Visual Studio จะแสดงเฉพาะข้อมูลเมตา


132

ฉันกำลังทำงานใน Web Project ใน Visual Studio 2008 เมื่อฉันกด F12 (หรือคลิกขวาแล้วเลือก Go To Definition) Visual Studio จะไปที่ไฟล์ Metadata อย่างสม่ำเสมอแทนที่จะไปที่ซอร์ส

บางจุด:

  • ซอร์สโค้ดทั้งหมดคือ C # ไม่มี VB.Net
  • โครงการทั้งหมดอยู่ในโซลูชันเดียวกัน
  • ทุกอย่างเป็นการอ้างอิงโครงการตรงข้ามกับการอ้างอิงไฟล์ (ตรวจสอบและตรวจสอบอีกครั้ง)
  • ฉันได้ลองใช้วิธี Clean / Rebuild Solution แล้ว (ถึงขั้นล้างไดเร็กทอรี Temp, ไดเร็กทอรีไฟล์ ASP.NET ชั่วคราว ฯลฯ )

มีใครเห็นพฤติกรรมนี้และ / หรือทราบวิธีแก้ไขหรือไม่


ฉันมีปัญหานี้ในโซลูชันผสมกับ vb.net และ c # ในโครงการที่อ้างอิงต่างกันเท่านั้น แปลก: /
Bayard Randel

ทางออกเดียวที่ฉันเคยเห็นคือhttp://johnson1965.blogspot.com/2007/07/visual-studio-2005-go-to-definition-i.html
NotMe

สำหรับฉันการรีสตาร์ท Visual Studio แก้ไขปัญหานี้ (ในโครงการ. net Core ภายในโซลูชันหลายโครงการ)
niico

คำตอบ:


59

นักพัฒนารายอื่นพบคำตอบ โปรเจ็กต์เฉพาะที่เรามีปัญหาถูกเพิ่มเป็นการอ้างอิงไฟล์จากนั้นนำออกและเพิ่มเป็นข้อมูลอ้างอิงโครงการ Visual Studio เก็บไว้ในไฟล์ csproj สำหรับเว็บไซต์ทำให้เกิดปัญหา เขาเข้าไปแก้ไขไฟล์ csproj ด้วยตนเองเพื่อลบการอ้างอิงไฟล์ไปยังโครงการที่มีปัญหาและทุกอย่างได้รับการแก้ไขแล้ว


นี่เป็นข้อมูลที่ดีที่จะมี ฉันอยากรู้ว่าพวกคุณติดตั้ง SP1 แล้วหรือยัง?
NotMe

ถ้าฉันสามารถหาข้อมูลนั้นได้ทุกที่บนเว็บฉันจะบอกคุณ ฉันใช้ VS 2008 9.0.21022.8 RTM แต่ฉันจะถูกสาปถ้าฉันสามารถหาได้ทุกที่หากตรงกับ VS 2008 SP1 หรือต้นฉบับ
pfunk

เยี่ยมมากขอบคุณ - สิ่งนี้ช่วยฉันได้ ควรเป็น ProjectReference ในไฟล์ csproj หากเปิดโดยใช้ตัวแก้ไขข้อความ / xml อื่น ๆ ควรถูกลบออก
Victor Gelmutdinov

3
สิ่งนี้อาจเกิดขึ้นได้หาก GUID ใน ProjectReference ไม่ตรงกับค่า ProjectGuid ในโครงการที่อ้างถึง
David Gardiner

ขอบคุณ! ปัญหาประเภทนี้ยังคงมีอยู่ใน MSVS
Alex

42

เกิดขึ้นเมื่อคุณไม่ได้เพิ่มการอ้างอิงเป็นโครงการ แต่ชี้ไปที่ dll หรือ exe โดยใช้แท็บเรียกดูในกล่องโต้ตอบเพิ่มการอ้างอิง หากคุณเพิ่มการอ้างอิงโดยใช้แท็บโครงการคุณควรไปที่ซอร์สโค้ดโดยตรงเมื่อคุณเลือกไปที่คำจำกัดความ

อย่างไรก็ตามหากคุณติดตั้งReSharperคุณจะไปที่ซอร์สโค้ดแม้ว่าคุณจะเพิ่มการอ้างอิงของคุณไปยัง dll / exe โดยใช้แท็บเรียกดู


39

ดูเหมือนว่าจะต้องตั้งค่าใน Resharper ด้วย Visual Studio ของฉันไม่นำทางไปยังซอร์สโค้ด. NET Framework จนกว่าฉันจะเปิดใช้งานใน Resharper

การตั้งค่า Resharper เพื่ออนุญาตการนำทางไปยังแหล่งภายนอก


1
สวัสดีมันได้ผลสำหรับฉัน มันแก้ปัญหานั้นได้ ใช้ VS2015 Update 3, ReSharper 2016.1.2
Michal

25

1.ปิดโซลูชันของคุณ

2.ลบ<name of the solution>ไฟล์. suo ที่ซ่อนอยู่ในโฟลเดอร์ที่<name of the solution>มีไฟล์. sln ของโซลูชันของคุณอยู่

3.เปิดโซลูชันของคุณ

4.สร้างโซลูชันของคุณใหม่


7
นี่คือตัวเลือกที่เหมาะกับฉัน อย่างไรก็ตามฉันใช้ VS2019 RC (16.0.0) และต้องลบไฟล์. u ที่. vs \ {ProjectName} \ v16
Nick DeVore

1
ทำความสะอาดให้ฉันด้วย การใช้ไฟล์ VS2017, .sou อยู่ในหลายตำแหน่ง - ".vs \ <ProjectName> \ v15" เหมือนกับที่ Nick สังเกตว่าไฟล์ VS2019 .sou อยู่ใน V16 subdir โปรดทราบว่าฉันยังมี subdir "... V14" ซึ่งเห็นได้ชัดจาก VS2015 ก่อนหน้านี้ที่ฉันใช้กับโซลูชันเดียวกันก่อนที่จะอัปเกรดเป็นปี 2017 ล้างข้อมูลทั้งหมดและปัญหาทั้งหมดก็หายไป
BRebey

1
* .suo ไม่ใช่. คุณเป็นนามสกุลไฟล์จริง
Mike Cheel

1
เหมือนกันใน Visual Studio 2019 ปิดโซลูชันเปิดโซลูชันใน file explorer ค้นหาไฟล์. suo และลบทั้งหมด เปิดโซลูชันอีกครั้งและใช้งานได้อีกครั้ง
yesman

ตัวเลือกนี้ใช้ได้ผลสำหรับฉันขอบคุณ สำหรับ VS2019 ลบ vs โฟลเดอร์และเปิดโครงการ
Ashi

21

สำหรับผู้ที่ใช้ VS 2017 (ตอนนี้ฉันอยู่ที่เวอร์ชัน 15.3.4) ต่อไปนี้เป็นขั้นตอนง่ายๆ:

  1. เปิดโซลูชันของคุณใน Windows Explorer และปิด Visual Studio
  2. ในเมนู explorer เลือกดูและตรวจสอบให้แน่ใจว่ามีการทำเครื่องหมายในช่อง "รายการที่ซ่อนอยู่"
  3. ไปที่โฟลเดอร์ย่อย .vs\[your solution name]\v15
  4. ลบ.suoไฟล์
  5. รีสตาร์ท VS และสร้างโซลูชันของคุณ

ที่แก้ไขให้ฉัน: F12 เปิดไฟล์ต้นฉบับจริงไม่ใช่เวอร์ชัน "จากข้อมูลเมตา"


ตามที่ระบุไว้ในความคิดเห็นที่อื่นไดเร็กทอรีคือ v16 หากคุณใช้ VS2019
Otis

10

Visual Studio มักประสบปัญหาในการไปที่ข้อมูลเมตาแทนที่จะเป็นโครงการของคุณหากคุณเปลี่ยนตำแหน่งที่คุณกำลังสร้างโครงการกล่าวคือคุณอาจมีหลายเวอร์ชันเพื่อทดสอบสิ่งต่างๆ

เพียงแค่ลบข้อมูลอ้างอิงและเพิ่มกลับทันทีและทุกอย่างจะถูกแยกออก


8

โซลูชันที่ทำเครื่องหมายไว้ไม่ได้ผลเสมอไป คุณต้องตรวจสอบให้แน่ใจว่า GUID โครงการที่อ้างอิงในไฟล์โครงการเป็น GUID ที่ถูกต้องสำหรับโครงการที่คุณพยายามอ้างอิง Visual Studio อนุญาตให้พวกเขาออกจากการซิงค์ในบางสถานการณ์ คุณสามารถรับ GUID โครงการจากไฟล์โครงการด้วยโปรแกรมแก้ไขข้อความ ดังนั้นหากโครงการอ้างอิงโครงการ B เปิดโครงการ B.csproj ในโปรแกรมแก้ไขข้อความให้คัดลอก GUID โครงการจากแท็ก จากนั้นเปิดโครงการ A.csproj ในโปรแกรมแก้ไขข้อความและตรวจสอบให้แน่ใจว่าคุณใช้ GUID ที่ถูกต้อง ค้นหาชื่อโครงการ "B" ในกรณีนี้ ควรอยู่ที่. แทนที่ GUID ในแท็กด้วยอันที่ถูกต้อง บันทึกและโหลดซ้ำ แน่นอนว่าตรวจสอบให้แน่ใจว่าการอ้างอิงตามไฟล์ไปยังโครงการของคุณถูกลบออก คุณต้องการเพียงการอ้างอิงโครงการ


6

ฉันฆ่าอินสแตนซ์ VS ทั้งหมดลบ SUO เปิด sln และมันก็ใช้ได้สำหรับฉัน ...


ฉันมีข้อผิดพลาด msbuild ที่ไม่คาดคิดและมีปัญหามากมายเกิดขึ้นในภายหลังรวมถึงปัญหานี้ด้วย วิธีนี้ช่วยแก้ปัญหาได้ แปลก.
Chris Lukic

3

ลบการอ้างอิง dll, Build (จะได้รับข้อผิดพลาด), เพิ่มการอ้างอิง (คุณเอาออก) แล้วสร้างอีกครั้ง ... F12 ในฟังก์ชั่นของคุณควรใช้งานได้ (ใช้ได้กับฉัน)


2

ฉันหาวิธีแก้ปัญหาของฉันได้จากโพสต์นี้บางทีมันอาจจะใช้ได้กับพวกคุณบางคน

ฉันทำตามขั้นตอนเหล่านี้:

  1. ปิดโซลูชัน
  2. ลบไฟล์ฐานข้อมูล intellisense สำหรับโซลูชัน: .ncb
  3. เปิดโซลูชัน
  4. สร้างโซลูชันใหม่

(ฉันเชื่อว่าขั้นตอนที่ 3 หรือ 4 จะสร้างไฟล์ฐานข้อมูล intellisense ใหม่เมื่อไม่มี)

Intellisense, "go to defintion" และ "find all references" ควรจะใช้งานได้อีกครั้ง


2

ในกรณีของฉัน (โดยใช้ Visual Studio Professional 2015) เมื่อฉันปิดใช้งานตัวออกแบบ XAML F12 ก็หยุดทำงาน ทันทีที่ฉันเปลี่ยนกลับการเปลี่ยนแปลงและรีสตาร์ท Visual Studio F12 จะทำงานอีกครั้ง

ตรวจสอบรูปแบบหลาย ๆ ครั้งเพื่อยืนยันและโพสต์แล้ว หวังว่ามันจะช่วยใครบางคน


1

อาการ:

Visual Studio 2010 Ultimate ล้มเหลวซ้ำแล้วซ้ำเล่าในการค้นหาการอ้างอิงถึงฟังก์ชัน #defines รวม ฯลฯ เมื่อใช้คุณลักษณะ "Go To Definition" หรือ "Go To Declaration" หรือ "Find All References" - Intellisense ผิดปกติกำลังทำงานอยู่

การแก้ไข:

  1. ปิด Visual Studio
  2. ลบ (เปลี่ยนชื่อหากคุณต้องการอนุรักษ์นิยม) ไฟล์. pdf ของโซลูชัน
  3. เปิด Visual Studio อีกครั้ง

ไฟล์. pdf จะถูกสร้างใหม่โดยอัตโนมัติโดยการแยกวิเคราะห์ไฟล์รวมในโซลูชันของคุณ


2
@alestanis บางทีคำตอบนั้นอาจไม่ช่วยแก้ปัญหาให้กับทุกคน
nuzzolilo

@alestanis ฉันมีปัญหาใน OP แต่คำตอบที่ยอมรับไม่ได้ช่วยฉัน .... บางทีเราควรจะลบคำถามทั้งหมดที่มีคำตอบที่ยอมรับ
Carl

1

สำหรับฉันโซลูชัน GUID ใช้ไม่ได้ผลและฉันไม่พบไฟล์. ncb ของฉัน (หรือบางทีฉันก็ขี้เกียจและดูไม่ยากพอ แต่นั่นก็ไม่สำคัญ) การสร้างและรีสตาร์ทวิชวลสตูดิโอไม่ได้ช่วยอะไรเช่นกัน

สิ่งที่ฉันทำคือปิด Visual Studio และลบ. dll และ .pdb ที่ถูกอ้างถึงที่ด้านบนของไฟล์ Meta Data ที่ Intellisense ของฉันยังคงเชื่อมโยงอยู่ ในกรณีของฉันหมายความว่าฉันลบ. dll และเป็นไฟล์. pdb จาก Utilities / bin / Release (ยูทิลิตี้คือชื่อของโปรเจ็กต์. dll ที่ฉันมีปัญหา) จากนั้นฉันรีสตาร์ทวิชวลสตูดิโอและสร้าง. dll ขึ้นมาใหม่จากนั้นจึงเป็นโซลูชันทั้งหมด ไม่มีปัญหาอีกต่อไป!


1

เพิ่งพบสาเหตุอื่น. ฉันอัปเกรดโปรเจ็กต์เว็บเป็น 4.0 แต่ออกจากไลบรารีคลาสที่ 2.0 เมื่อถึงจุดนั้นไลบรารีคลาสทั้งหมดในโซลูชันของฉันจะถือว่าเป็นการอ้างอิงไฟล์จากโครงการเว็บของฉัน อาจช่วยคนอื่นได้ ...


1

ฉันประสบปัญหาเดียวกันและเพื่อนร่วมงานคนหนึ่งให้วิธีแก้ปัญหาต่อไปนี้แก่ฉันและมันได้ผล! หากข้อใดข้างต้นไม่เหมาะกับคุณ

  1. ลบการอ้างอิงทั้งหมดและเพิ่มกลับ (ตรวจสอบให้แน่ใจว่าเส้นทางถูกต้อง)
  2. ไปที่คุณสมบัติโซลูชันและตรวจสอบการอ้างอิงโครงการของโครงการทั้งหมดอีกครั้ง ตรวจสอบให้แน่ใจว่ามีการเพิ่มโปรเจ็กต์ที่คุณกำลังใช้โดยขึ้นอยู่กับโปรเจ็กต์ที่คุณกำลังทำอยู่

1

ฉันทำตามขั้นตอนที่แนะนำทั้งหมดแล้ว แต่ไม่มีอะไรเปลี่ยนแปลง
ในที่สุดก็คลิกขวาและเพิ่มเมนูอ้างอิงแท็บโครงการ

  1. เพียงแค่ยกเลิกการเลือกโครงการอ้างอิง
  2. บันทึกโซลูชัน
  3. เลือกโครงการเดียวกัน
  4. สร้างโซลูชันใหม่

จัดเรียงปัญหาแล้ว หวังว่านี่จะช่วยได้บ้าง


1

ขั้นตอนด้านล่างใช้ได้ผลสำหรับฉัน

  1. ไปที่ไฟล์. csproj
  2. เปิดใน Notepad ไปที่บรรทัดที่อ้างถึง dll<Reference Include="">
  3. ลบบรรทัด

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

1

หลังจากลบไฟล์ dll จาก Visual Studio ก่อนและเพิ่มกลับด้วยตนเองจาก Solution Explorer -> เว็บไซต์ -> เพิ่ม -> การอ้างอิงและการเปิดใช้งานแอปพลิเคชั่น 32 บิตใน IIS ได้รับการแก้ไขให้ฉัน


1

# 1

ตรวจสอบ "View - Object Browser" และหากคุณเห็นมากกว่าหนึ่งแอสเซมบลีที่มีชื่อเดียวกันนั่นคือสาเหตุที่คุณได้รับข้อผิดพลาดนี้

สำหรับเรามันเป็นข้อผิดพลาดใน VS 2019:

ถ้าคุณมี ASP.NET "Razor helpers" ในApp_Codeโฟลเดอร์ Visual Studio 2019 จะตีความว่าเป็นแอสเซมบลีที่แตกต่างกัน แต่ใช้ชื่อเดียวกันนั่นจะซ่อนแอสเซมบลีจริง

ไม่มีวิธีแก้ไขใด ๆ นอกจากเขียนตัวช่วยเหล่านั้นใหม่เป็นมุมมองบางส่วนหรือตัวช่วย HTML (คุณจะต้องทำเช่นนั้นต่อไปหากคุณวางแผนที่จะย้ายไปที่. NET Core)

ดูวิธีแก้ปัญหานี้บนไซต์ของ MS และโปรดเพิ่มคะแนนข้อบกพร่องที่นั่นเพื่อให้ MS แก้ไข

https://developercommunity.visualstudio.com/solutions/1008795/view.html (โปรดอัพคะแนน)

# 2

อีกเหตุผลหนึ่งที่ทำให้แอสเซมบลีเดียวกันสามารถโหลดได้สองครั้งในอ็อบเจ็กต์เบราว์เซอร์คือถ้าคุณมีโปรเจ็กต์ทดสอบหน่วยที่เริ่มกระบวนการ iis-express และไม่เคยฆ่ามันอย่างถูกต้อง


0
  1. คลิกที่เมนูเว็บไซต์จาก VS.
  2. เพิ่มข้อมูลอ้างอิง ...
  3. คลิกที่แท็บโครงการจากกล่องโต้ตอบ
  4. เลือก ddl
  5. คลิกที่ปุ่มตกลง

0

ในกรณีของฉันฉันเพิ่งเปลี่ยนเมื่อไม่นานมานี้

<mvcBuildViews>

เป็น "true" ในไฟล์. csproj ของไซต์ของฉัน (เพื่อค้นหาข้อผิดพลาดในการคอมไพล์ในไฟล์มุมมอง Razor ของฉัน: http://forums.asp.net/t/1909113.aspx?How+to+have+Visual+Studio+2012+returned + compile + error + on + razor + syntax + error + in + asp + net + web + page + 2 + ) และเมื่อฉันสร้างฉันก็ได้รับข้อผิดพลาดจากภายในไดเรกทอรี / obj / Debug / ของไซต์ของฉัน จากไฟล์เหล่านั้น (ซึ่งล้าสมัย) การคลิกขวาและเลือก "ไปที่คำจำกัดความ" จะทำให้ฉันได้รับเวอร์ชัน [ข้อมูลเมตา]

สำหรับฉันวิธีแก้ปัญหาที่นี่ใช้ไม่ได้ผลเพราะฉันไม่ได้เริ่มจากไฟล์ที่อยู่ในโปรเจ็กต์ของฉันจริงๆ ลบไดเร็กทอรี / obj / Debug / ทั้งหมดนั้นข้อผิดพลาดก็หายไปและจากไฟล์ปกติใด ๆ ฉันสามารถใช้ Go To Definition ได้อย่างถูกต้อง


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", ".... \ assemblies \ Some.Project \ Some.Project.csproj", "{B7654321-5321-4AAE- FE3D-ED20900088ED} "EndProject

  6. GUID แรกที่แสดงคือ Solution 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. คลิกขวาที่โฟลเดอร์ Reference จากนั้น
  4. เพิ่มการอ้างอิงไปยังไฟล์ dll อีกครั้ง

0

สิ่งนี้สามารถเกิดขึ้นได้หากคุณพยายามข้ามไปที่คำจำกัดความในโปรเจ็กต์ที่ยกเลิกการโหลดแล้ว (ไม่พร้อมใช้งาน) คลิกขวาที่โปรเจ็กต์ที่ยกเลิกการโหลดแล้วเลือก "โหลดโปรเจ็กต์ซ้ำ"


-1

เดาได้ดีที่สุดคือคุณไม่มีข้อมูลการดีบัก บางทีคุณอาจมีสำเนาแอสเซมบลีของคุณหลายชุดบนดิสก์และไม่มีไฟล์. pdb อยู่ด้วย

ทำการค้นหาชื่อแอสเซมบลีของคุณจากโปรเจ็กต์ของคุณและลบออกทั้งหมดและสร้างใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.