ไม่พบไฟล์. cs สำหรับการดีบักซอร์สโค้ด. NET


93

ฉันพยายามตั้งค่าการดีบักซอร์ส. NET โดยทำตามคำแนะนำแบบ MDSNนี้ Symbol cache ได้รับการตั้งค่าอย่างถูกต้องเช่นเดียวกับการตรวจสอบ 'Enable .NET Framework source Stepping'

แต่ต่อมาเมื่อใดก็ตามที่ฉันต้องการเข้าสู่รหัส. NET ฉันจะได้รับแจ้งให้ระบุตำแหน่งของไฟล์ cs ที่เกี่ยวข้อง เกิดข้อผิดพลาดเป็น และYou need to find <filename>.cs to view the source for the current call stack frameThe debugger could not locate the source file <filename>.cs

ฉันได้รับเสนอให้เรียกดูไฟล์ (แต่ไม่มี) หรือดูการแยกชิ้นส่วน (แต่ฉันไม่ต้องการอย่างนั้น)

จะเข้าสู่ซอร์สโค้ด. NET ได้อย่างไร?

คำตอบ:


144

ทั้งในกรณีของฉันฉันไม่ได้พยายามที่จะแก้ปัญหากรอบ Net แต่ผมได้รับข้อผิดพลาดเดียวกัน: ไม่สามารถหาไฟล์ .cs สำหรับการดีบักรหัสที่มา ดังนั้นฉันจึงต้องเปิดตัวเลือก "เปิดใช้งานรหัสของฉัน" ภายใต้:
เครื่องมือ -> ตัวเลือก -> การดีบัก -> ทั่วไป -> เปิดใช้งานรหัส

ตามเอกสาร MS:

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

https://docs.microsoft.com/en-us/visualstudio/debugger/just-my-code


ฉันได้เปิดใช้งาน ".NET Framework source Stepping" ซึ่งปิดใช้งาน "Just my code" โดยอัตโนมัติและทำให้ฉันไม่สามารถก้าวเข้ามาได้จนกว่าฉันจะพบสิ่งนี้ ดังนั้นระวังเมื่อทำเครื่องหมายตัวเลือกเพื่อดูว่าอะไรถูกปิดใช้งาน :)
Alan Warden

1
ฉันคิดว่าฉันได้เปิดใช้งานก่อนหน้านี้แล้ว ฉันไปตรวจสอบแล้วก็ไม่ได้ตรวจสอบ ขอบคุณ!
coinbird

1
คำตอบที่ดีและแก้ไขปัญหาของฉัน แต่จะข้ามไฟล์และไม่ก้าวเข้าไปในนั้น อาจต้องการวิธีแก้ปัญหาอื่นหากเป้าหมายคือขั้นตอนในไฟล์
Word Rearranger

53

การตรวจสอบTools-> Options-> Debugging-> General-> Enable source server supportทำให้ทุกอย่างทำงานได้อย่างลึกลับ ฉันหวังว่าสิ่งนี้จะเป็นจริงสำหรับคุณ


19
พระเจ้าทำไมมันไม่ทำงาน? ยังคงได้รับแจ้งให้เรียกดูไฟล์ซอร์สโค้ดเมื่อพยายามเข้าสู่เฟรมเวิร์กโค้ด
gravidThoughts

29

ฉันใช้เวลาหนึ่งชั่วโมงเช่นกัน ในที่สุดฉันก็แก้ไขโดยรีเซ็ตการตั้งค่า -> เครื่องมือ -> การนำเข้าและส่งออกการตั้งค่า -> รีเซ็ตการตั้งค่าทั้งหมด


มันได้ผล! หลังจากรีเซ็ตฉันก็เพิกเฉยต่อการตั้งค่า 'options-> Debugging' และนำเข้าสิ่งที่ฉันส่งออก ดี !!
Mystic Lin

ทำงานใน VS 2015 Pro แน่นอนว่าฉันไม่มีการตั้งค่าแบบกำหนดเองใด ๆ ที่ฉันต้องการเพราะจะทำให้พวกเขาหายไป
RandomUs1r

การรีเซ็ตการตั้งค่าทั้งหมดของฉันช่วยแก้ปัญหานี้ให้ฉันด้วย ... ฉันมีการตั้งค่าสีที่กำหนดเองมากมายสำหรับการดีบักจึงต้องบันทึกลงในไฟล์แยกต่างหากซึ่งฉันไม่สามารถใช้งานได้อีกต่อไป grrr
EspressoBeans

ฉันรีเซ็ตการตั้งค่าและรีสตาร์ท Visual Studio 2017 การรีสตาร์ทหลังจากรีเซ็ตทำเคล็ดลับ
Siddharth

ฉันทำการรีเซ็ตนี้สำหรับ Visual Basic .NET กับ VS Ultimate 2013 เพราะนั่นคือสิ่งที่ฉันกำลังเขียนโค้ดและการรีเซ็ตนี้หยุด datetime.cs แปลก ๆ ไม่พบข้อความแสดงข้อผิดพลาด
JohnH

7

คำตอบทั้งหมดนี้พูดถึงการเพิกเฉย / หลีกเลี่ยงซอร์สโค้ดแทนที่จะก้าวเข้าไปในนั้นจริงๆ

@JBSnorroมาถูกทางแล้ว แต่ปัญหาคือ Microsoft ไม่ได้เผยแพร่สัญลักษณ์ / แหล่งที่มาของ. NET ทั้งหมดที่คุณอาจพบ ฉันไม่รู้ว่าเป็นความตั้งใจในส่วนของพวกเขาหรือไม่ แต่ในการก้าวเข้าสู่แหล่งข้อมูล MS พวกเขาจำเป็นต้องเผยแพร่ทุกเวอร์ชันของทุกแอสเซมบลีซึ่งเป็นงานด้านลอจิสติกส์ขนาดใหญ่

Tools-> Options-> Debugging-> General-> Enable source server supportจะใช้งานได้ในหลาย ๆ กรณี แต่ฉันพบว่าตัวอย่างเช่นmscorlib.dll4.6.1 ไม่มีสัญลักษณ์และ / หรือแหล่งที่มาที่ถอดรหัส ดังนั้นฉันจึงไม่สามารถก้าวเข้าสู่ซอร์สโค้ดทั่วไปเช่นDictionary.csหรือTask.csเป็นตัวอย่างได้ เนื่องจากแหล่งที่มาและสัญลักษณ์ของเซิร์ฟเวอร์สัญลักษณ์ MS มีแนวโน้มที่จะเปลี่ยนแปลงตลอดเวลา ปัญหาของฉันอาจได้รับการแก้ไขเมื่อคุณอ่านสิ่งนี้?

เมื่อฉันดีบั๊กโซลูชันเดียวกันในไรเดอร์ของ Jetbrain ฉันสามารถมองเห็นและก้าวผ่านทุกคลาสในทุกชุดประกอบ. NET โดยไม่มีปัญหา อย่างไรก็ตามใน VS ฉันสามารถก้าวเข้าสู่ชั้นเรียนได้เพียงบางชั้น แต่ไม่สามารถก้าวเข้าสู่ชั้นเรียนอื่นได้?

หากคุณมุ่งมั่นที่จะก้าวเข้าสู่ซอร์สโค้ด. NET ทั้งหมดคุณสามารถใช้ DotPeek ของ Jetbrain และถอดรหัสแอสเซมบลี. NET กับไฟล์. cs จริงลงในดิสก์ของคุณ เมื่อคุณเห็นสิ่งนี้

ไม่พบตัวอย่างซอร์สโค้ด

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

แต่หากคุณต้องการเพียงแค่ซ่อน "ไม่พบแหล่งที่มา" นี้ไม่ให้ปรากฏขึ้นอย่างต่อเนื่องและคุณไม่สนใจที่จะก้าวเข้าสู่โค้ดที่ไม่มีแหล่งที่มาให้อ่าน@Alex Shermanคำตอบ คุณจะต้องค้นหาว่าไฟล์ที่กระทำผิดนั้นอยู่ในแอสเซมบลีใดจากนั้นเพิ่มชื่อแอสเซมบลีนั้นในรายการยกเว้น

อาหารสำหรับความคิดฉันไม่ใช่แฟนของ Rider over VS. ไรเดอร์ยังคงสัมผัสได้ถึงความดิบและขาดความบ้าคลั่งในการสร้างเครื่องมือ VS อย่างไรก็ตาม !! ฉันชอบที่จะติดตั้งเคียงข้างกันในกรณีเช่นนี้ซึ่งฉันรู้ว่าฉันสามารถเจาะลึกเข้าไปในวัชพืชได้


7

ทำความสะอาดโซลูชันก่อนสร้างช่วยแก้ปัญหาให้ฉันได้

เพียงแค่นำทางและคลิกที่:

  1. Build-> Clean Solution.
  2. Build-> Build Solution (Ctrl + Shift + B).

7

ฉันได้ลองคำตอบทั้งหมดจากด้านบนแล้วและไม่มีอะไรได้ผล

สิ่งนี้แก้ไขให้ฉัน:

Debug -> Delete all Breakpoints

และแก้ไขปัญหาได้! หลายสิ่งหลายอย่างที่ทำให้เกิดปัญหานี้


หลังจากลองใช้การตั้งค่าดีบักเกอร์ JIT ทุกชุดรวมกันทำความสะอาดโซลูชันของฉันรีสตาร์ท VS2019 หลายร้อยครั้งซ่อมแซมรีเซ็ตการตั้งค่าทั้งหมดของฉัน ฯลฯ ฯลฯ ฯลฯ มันเป็นการลบจุดพักทั้งหมดที่ทำให้ข้อผิดพลาด "ไม่พบแหล่งที่มา" ของฉันหายไป เมื่อพยายามดีบักการทดสอบ XUnit AAAAAAAAAAARGH. และขอบคุณ @HomeMade
Ted

เป็นขั้นตอนเพิ่มเติม - ฉันต้องทำความสะอาดและสร้างโซลูชันขึ้นมาใหม่เพื่อให้มันใช้งานได้สำหรับฉัน
เรนทร์

1

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


มันช่วยฉัน ฉันติดตั้งปี 2019 และทุกอย่างใช้งานได้อีกครั้ง บางทีฉันอาจจะทำให้การตั้งค่าของฉันวุ่นวาย
Mo D Genesis

0

หากข้อผิดพลาดมาจากการค้นหา "nullable.cs" หรือไฟล์ต้นฉบับหลักอื่น ๆ :

คุณสามารถปิดสัญลักษณ์สำหรับโมดูลที่เฉพาะเจาะจงโดยใช้แล้วที่อยู่ด้านล่างDebug -> Options -> Debugging -> SymbolsSpecify Excluded Modules

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



0

ฉันได้รับข้อผิดพลาดนี้เมื่ออัปเดตแพ็คเกจ NuGet ในโครงการในขณะที่ไม่มีการอัปเดตในโครงการอื่น ๆ ของโซลูชัน

ไปที่ NuGet Manager ของโซลูชันและใช้ฟังก์ชันการรวมซึ่งทำให้มั่นใจได้ว่าโครงการทั้งหมดในโซลูชันใช้เวอร์ชันเดียวกันได้แก้ไขปัญหาให้ฉัน


0

ในกรณีของฉันฉันเปลี่ยนชื่อชั้นเรียน บางทีมันอาจจะสับสนกับโมดูลอื่น ๆ เมื่อฉันเปลี่ยนชื่อแล้วฉันสามารถก้าวเข้ามาได้

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