ซอร์สไฟล์แตกต่างจากตอนที่สร้างโมดูล


103

นี่มันทำให้ฉันแทบคลั่ง

ฉันมีโครงการที่ค่อนข้างใหญ่ที่ฉันกำลังพยายามแก้ไข ผมสังเกตเห็นก่อนหน้านี้ว่าเมื่อฉันพิมพ์DbCommand, ภาพสตูดิโอไม่ได้ทำไวยากรณ์ใด ๆ System.Data.Commonไฮไลท์มันและฉันใช้การใช้

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

ทุกครั้งที่ชั้นเรียนที่ไม่ได้ทำการไฮไลต์เรียกว่าฉันได้รับ"the source file is different from when the module was built"ข้อความ

ฉันทำความสะอาดโซลูชันและสร้างใหม่หลายครั้งลบไฟล์ tmp ทำตามคำแนะนำทั้งหมดที่นี่รับ "ไฟล์ต้นฉบับแตกต่างจากตอนที่สร้างโมดูล" รีสตาร์ทเว็บเซิร์ฟเวอร์และยังคงบอกฉันว่าไฟล์ต้นทางแตกต่างกันเมื่อไม่ชัดเจน

ฉันไม่สามารถทดสอบโค้ดใด ๆ ที่ฉันเขียนในวันนี้ได้ด้วยเหตุนี้

  • แหล่งที่มาจะแตกต่างจากไบนารีได้อย่างไรเมื่อฉันปฏิบัติตาม
  • มีวิธีใดบ้างที่จะทำให้รู้สึกถึงสตูดิโอวิชวลสตูดิโอหรือฉันพลาดอะไรไป

ขออภัยหากมากไปหน่อย เวอร์ชันสั้น: ฉันรวบรวมโปรแกรมของฉันจากนั้นฉันก็ลองดีบักและสตูดิโอภาพบอกว่าไฟล์ต้นฉบับของฉัน (ที่ฉันเพิ่งรวบรวม) นั้นแตกต่างจากโมดูลที่ฉันเพิ่งสร้างขึ้น ฉันแค่อยากรู้ว่าทำไมมันถึงคิดแบบนั้น
ความผิดหวัง

คำตอบ:


111

ฉันพบปัญหานี้ในการเรียกใช้แอปคอนโซลโดยแหล่งที่มาที่แตกต่างกันคือแหล่งที่มาที่มีจุดเริ่มต้น (โมฆะแบบคงที่ Main) การลบไดเร็กทอรี bin และ obj และทำการสร้างใหม่ทั้งหมดดูเหมือนจะแก้ไขปัญหานี้ได้ แต่ทุกครั้งที่ฉันทำการเปลี่ยนแปลงโค้ดมันจะล้าสมัยอีกครั้ง

เหตุผลที่ฉันพบคือ:

  1. ฉันได้ตรวจสอบ "เฉพาะสร้างโครงการเริ่มต้นและการพึ่งพาบนรัน" (เครื่องมือ -> ตัวเลือก -> โครงการและโซลูชัน -> สร้างและเรียกใช้)
  2. ในเครื่องมือจัดการการกำหนดค่าโครงการเริ่มต้นของฉันไม่ได้เลือก "สร้าง"

(สำหรับ # 2 -> สามารถเข้าถึงได้ผ่านแถบเครื่องมือใต้รายการแบบเลื่อนลง 'Debug / Release')


7
+1 สำหรับเคล็ดลับตัวจัดการการกำหนดค่า ฉันพยายามที่จะแยกแยะสิ่งนี้มาเป็นเวลาหนึ่งชั่วโมงแล้ว
Nick Sarabyn

ฉันมีโซลูชันหลายสาขาใน TFS การลบไดเร็กทอรี bin และ obj ในทุกสาขาที่เช็คเอาต์ดูเหมือนจะล้างสิ่งต่างๆ
sparebytes

ในกรณีของฉันฉันถูกเปลี่ยนsolution platformsจากAny CPUเป็นMixed Platformโดยไม่ได้ตั้งใจ !!! ฉันเปลี่ยนกลับเป็นAny CPUและใช้งานได้อีกครั้ง
vaheeds

ขอขอบคุณโซลูชัน> คุณสมบัติ> คุณสมบัติการกำหนดค่า> การกำหนดค่าแอปคอนโซลของฉัน (ที่เรียกใช้การทดสอบสำหรับเว็บแอปใน sln เดียวกัน) ไม่ถูกเลือก
Emery.noel

23

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

ปัญหานี้คือ dll และหรือไฟล์ pdb ของคุณไม่ได้รับการซิงค์


1
คุณไม่ได้พูดถึงโดยตรง แต่ "ยกเลิกการโหลดโปรเจ็กต์" (โหลดซ้ำอีกครั้ง) ได้ผลสำหรับฉันขอบคุณ
javaLover

สิ่งนี้ใช้ได้ผลสำหรับฉัน:> สิ่งนี้ไม่ได้ผลในที่สุดสิ่งที่ฉันลองทำคือคลิกขวาที่โครงการและสร้างใหม่ทีละโครงการ นั่นอัปเดตไฟล์. dlls และ. pdb เพื่อให้ฉันสามารถแก้ไขข้อบกพร่องได้
Khachatur

ยกเลิกการโหลดโครงการ (โหลดซ้ำอีกครั้ง) และเผยแพร่บิตล่าสุดไปยังเว็บเซิร์ฟเวอร์ (IIS) ได้ผลสำหรับฉัน
Jason Tang

5

ทำตามขั้นตอนต่อไปนี้

  1. เพียงแค่ลบไดเร็กทอรี bin ออกจากโปรเจ็กต์ที่สร้าง DLL
  2. สร้างโครงการใหม่
  3. ลบการอ้างอิงจากโปรเจ็กต์ที่อ้างอิงกับ DLL
  4. รวมข้อมูลอ้างอิงอีกครั้ง
  5. สนุก.

4

นอกเหนือจากคำตอบเหล่านี้ฉันมีปัญหาเดียวกันในขณะที่เปลี่ยน DLL ใหม่ด้วยอันเก่าเนื่องจากเส้นทางที่ไม่ถูกต้อง หากคุณยังคงได้รับข้อผิดพลาดนี้คุณไม่สามารถอ้างอิงเส้นทางที่ผิดสำหรับ DLL ได้ ไปที่ตัวจัดการ IIS แล้วคลิกเว็บไซต์ที่ใช้ DLL ของคุณ ในหน้าต่างด้านขวาให้คลิกการตั้งค่าขั้นสูงและไปที่เส้นทางของโฟลเดอร์ Physical Path บน File Explorer และตรวจสอบให้แน่ใจว่าคุณใช้โฟลเดอร์นี้เพื่อแทนที่ DLL ของคุณ


4

บางสิ่งให้คุณตรวจสอบ:

คุณได้ตรวจสอบการอ้างอิงโครงการของคุณอีกครั้งหรือไม่?

คุณมี Visual Studio ที่เริ่มทำงานบนเว็บเซิร์ฟเวอร์หรือไม่ ตรวจสอบถาดระบบและมองหาหน้าที่มีไอคอนฟันเฟือง (คุณอาจมีมากกว่าหนึ่ง):

ข้อความแสดงแทน
(ที่มา: msdn.com )

คลิกขวาและปิด / ออก คุณอาจมีมากกว่าหนึ่ง คุณสามารถแก้ไขข้อบกพร่องของการเปลี่ยนแปลงได้หรือไม่

คุณใช้เวอร์ชันดีบัก แต่สร้างเฉพาะเวอร์ชันที่วางจำหน่าย (หรือในทางกลับกัน)?

คอมไพล์สำเร็จจริงหรือ? ฉันรู้ว่าฉันคลิกผ่าน "มีข้อผิดพลาดคุณต้องการดำเนินการต่อหรือไม่" ส่งข้อความสองสามครั้งโดยไม่รู้ตัว


คอมไพล์สำเร็จ ฉันรู้สึกไม่สบายใจเมื่อพูดถึง Visual Studio ฉันจะตรวจสอบได้อย่างไรว่าฉันใช้เวอร์ชันดีบักหรือรีลีสอยู่
ผิดหวัง

1
@frustrated - ฉันแค่พยายามกำจัดสิ่งที่ชัดเจน หากต้องการตรวจสอบว่าคุณอยู่ในรุ่นหรือแก้ไขข้อบกพร่องให้ตรวจสอบรายการแบบเลื่อนลงถัดจากไอคอน "แก้ไขข้อบกพร่อง" บนแถบเครื่องมือ ซึ่งจะเป็น "Debug" หรือ "Release"
ChrisF

ขอบคุณ. มันบอกว่า debug นั่นคือสิ่งที่ควรจะเป็น?
ผิดหวัง

@frustrated - เป็นการเริ่มต้นที่ดี;). คุณสามารถ "แก้ไขข้อบกพร่อง" รหัสรุ่นได้ แต่ไม่มีประโยชน์เท่า - แต่ไม่เกี่ยวข้องที่นี่ หมายความว่าคุณ (หรืออย่างน้อยก็ควรจะเป็น) สร้างและเรียกใช้ไบนารีดีบัก ฉันจะต้องคิดมากขึ้น - โดยที่ไม่เห็นปัญหาจริง ๆ มันก็ยากที่จะวินิจฉัย
ChrisF

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

3

สำหรับบริการเว็บปัญหาอาจเกิดจากการใช้คำสั่ง Visual Studio "View in Browser" ซึ่งจะวางไฟล์ DLL และ PDB ของบริการไว้ในโฟลเดอร์ bin และ obj เมื่อก้าวเข้าสู่บริการเว็บจากไคลเอนต์ Visual Studio จะใช้ PDB ในโฟลเดอร์ bin (หรือ obj) แต่ใช้ DLL ในโฟลเดอร์สร้างผลลัพธ์ของโครงการ มีวิธีแก้ปัญหาสองสามประการ:

  1. ลองลบไฟล์ DLL และ PDB ใน web service bin และไฟล์ obj
  2. ลองคลิก "ดูในเบราว์เซอร์" ใน Visual Studio

หากก่อนหน้านี้คุณได้รับข้อผิดพลาดที่ไม่ตรงกันของไฟล์ต้นฉบับ Visual Studio อาจเพิ่มชื่อไฟล์ลงในรายการสีดำ ตรวจสอบคุณสมบัติโซลูชันของคุณ เลือก "Common Properties -> Debug Source Files" ทางด้านซ้ายของกล่องโต้ตอบ หากไฟล์แหล่งบริการบนเว็บของคุณปรากฏในช่อง "อย่ามองหาไฟล์ต้นฉบับเหล่านี้" ให้ลบออก


2

ฉันเพิ่งมีปัญหานี้

ฉันลองทำทุกอย่างข้างต้นแล้ว แต่ได้ผลเพียง:

  • ลบไฟล์. pdb สำหรับวิธีแก้ปัญหา
  • ลบไฟล์. obj ที่ละเมิด (สำหรับไฟล์ที่ถูกรายงานว่าไม่ซิงค์)

สร้างโซลูชัน

สิ่งนี้แก้ไขปัญหาสำหรับงานสร้างทั้งหมดที่กำลังก้าวไปข้างหน้าสำหรับฉัน


ฉันคิดว่าการลบไฟล์. pdb เป็นสิ่งสำคัญที่นี่ สิ่งนี้เกิดขึ้นกับฉันเนื่องจากฉันได้คัดลอกไฟล์. pdb เก่าจากสาขาอื่น
Danzomida

1

นี่คือวิธีที่ฉันแก้ไขปัญหาใน Visual Studio 2010:

1) เปลี่ยนตัวเลือก "การกำหนดค่าโซลูชัน" จาก "ดีบัก" เป็น "รุ่น"

2) เริ่มการดีบัก

3) หยุดการดีบักและเปลี่ยนตัวเลือก "การกำหนดค่าโซลูชัน" กลับเป็น "ดีบัก"

สิ่งนี้ได้ผลสำหรับฉัน ขั้นตอนที่ 3 เป็นทางเลือก - มันใช้งานได้ดีเมื่อฉันเปลี่ยนเป็น "ปล่อย" แต่ฉันต้องการเปลี่ยนกลับ


1

วิธีแก้ปัญหาของฉัน:

ฉันได้รวมโครงการที่มีอยู่จากโซลูชันอื่นในไฟล์โซลูชันใหม่

ฉันไม่ได้สังเกตว่าเมื่อโครงการที่มีอยู่ถูกสร้างขึ้นใหม่มันกำลังใส่ผลลัพธ์สุดท้ายลงในไดเร็กทอรีเอาต์พุตของโซลูชันใหม่ ฉันมีเส้นทางตัวเชื่อมโยงที่กำหนดไว้เพื่อดูในไดเร็กทอรีเอาต์พุตของโซลูชัน OLD

การเปลี่ยนโปรเจ็กต์ของฉันเพื่อค้นหาในไดเร็กทอรีเอาต์พุตของโซลูชันใหม่ช่วยแก้ปัญหานี้ให้ฉันได้


1

ฉันประสบปัญหานี้และปรากฎว่าฉันใช้งานแอปพลิเคชันคอนโซลเป็นแอปพลิเคชัน windows การเปลี่ยนประเภทเอาต์พุตกลับไปที่คอนโซลช่วยแก้ปัญหาได้


1

ผมมีปัญหาเหมือนกัน. ในการแก้ไขฉันใช้ "Release Mode" เพื่อแก้ไขข้อบกพร่องใน VS2013 ซึ่งเพียงพอสำหรับฉันเพราะฉันทำงานในโหนด js \ c ++ addon


1

ยกเลิกการโหลดโปรเจ็กต์ที่มีไฟล์ที่เป็นสาเหตุของข้อผิดพลาด

โหลดโครงการซ้ำ

แก้ไขแล้ว



1

ปัญหาของฉันคือฉันมีสองโครงการในการแก้ปัญหาของฉัน โครงการที่สองเป็นโครงการทดสอบที่ใช้เรียกโครงการแรก ฉันเลือกเส้นทางไปยังการอ้างอิงจากโฟลเดอร์รีลีสโฟลเดอร์ bin

ดังนั้นเมื่อใดก็ตามที่ฉันทำการเปลี่ยนแปลงโค้ดของโปรเจ็กต์แรกและสร้างมันขึ้นมาใหม่มันจะอัปเดต dlls ในโฟลเดอร์ debug แต่โปรเจ็กต์การโทรนั้นชี้ไปที่โฟลเดอร์รีลีสทำให้ฉันมีข้อผิดพลาด "ไฟล์ต้นฉบับแตกต่างจากตอนที่โมดูล ถูกสร้างขึ้น "

เมื่อฉันลบการอ้างอิงไปยัง dll ของโปรเจ็กต์หลักในโฟลเดอร์รีลีสและตั้งค่าเป็น dll ในโฟลเดอร์ดีบั๊กปัญหาก็หายไป


0

วิธีแก้ปัญหา: - ปัญหาคือ: - หากบางโครงการของคุณในโซลูชันอ้างอิงถึงโครงการอื่น ๆ บางครั้ง dll ของบางโครงการจะไม่อัปเดตโดยอัตโนมัติเมื่อใดก็ตามที่คุณสร้างโซลูชันบางโครงการจะมีการสร้าง dll ก่อนหน้านี้ไม่ใช่ dll ล่าสุด

คุณต้องไปด้วยตนเองและคัดลอก dll ของโครงการสร้างล่าสุดลงในโครงการที่อ้างอิง


0

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

วิธีแก้ปัญหาของฉัน:
1) เปิดDocuments\IISExpress\config\applicationhost.config
2) อัปเดตvirtualDirectoryโหนดพร้อมไดเรกทอรีเป็นสำเนาใหม่และบันทึก


0

ปัญหาของฉันคือฉันมีบริการเว็บในโครงการและฉันเปลี่ยนเส้นทางการสร้าง

การกู้คืนเส้นทางการสร้างเริ่มต้นช่วยแก้ปัญหาของฉันได้


0

ฉันมีปัญหาเดียวกันนี้และฉันทำตามคำแนะนำส่วนใหญ่ในคำตอบอื่น ๆ ที่โพสต์ไว้ที่นี่ดูเหมือนจะไม่มีอะไรได้ผลสำหรับฉัน

ในที่สุดฉันก็เปิด IIS และรีไซเคิลพูลแอปพลิเคชันสำหรับเว็บแอปพลิเคชันของฉัน ฉันมี IIS เวอร์ชัน 8.5.9600 ฉันคลิกขวาที่เว็บแอปพลิเคชันแล้ว: ปรับใช้> รีไซเคิล> รีไซเคิลแอปพลิเคชันพูล> ตกลง

ดูเหมือนว่าจะได้รับการแก้ไขแล้วตอนนี้จุดพักได้รับผลกระทบตามที่คาดไว้ ฉันคิดว่าการทำเช่นนี้พร้อมกับการลบโฟลเดอร์ bin และ obj ช่วยสถานการณ์ของฉันได้

โชคดี!


0

ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันเพิ่งมีปัญหาเดียวกันและต้องการโพสต์ที่นี่เผื่อว่าจะช่วยคนอื่นได้ ฉันได้รับคอมพิวเตอร์เครื่องใหม่และฝ่ายไอทีได้รวมคอมพิวเตอร์เครื่องเก่าเข้ากับเครื่องใหม่ เมื่อฉันตั้งค่า TFS ฉันแมปเส้นทางภายในเครื่องที่แตกต่างจากที่ฉันใช้ก่อนหน้านี้กับไดรฟ์ภายในเพิ่มเติม เส้นทางเดิมยังคงมีอยู่จากข้อมูลที่ผสานในฮาร์ดไดรฟ์ของฉันดังนั้นฉันจึงยังคงสร้างและเรียกใช้ได้ เส้นทาง IIS ของฉันยังชี้ไปที่ไดเร็กทอรีเก่า เมื่อฉันอัปเดต IIS เป็นเส้นทางที่ถูกต้องฉันก็สามารถดีบักได้ดี ฉันยังลบไดเร็กทอรีเก่าเพื่อการวัดที่ดี


0

ฉันยังมีประสบการณ์นั้น ฉันแค่เปิดโฟลเดอร์ obj ในโปรเจ็กต์จากนั้นเปิดโฟลเดอร์ debug ลบไฟล์. pdb และนั่นคือทั้งหมดที่


0

ข้อผิดพลาดนี้ยังเกิดขึ้นหากคุณพยายามเปลี่ยนแปลงไฟล์ต้นฉบับที่ไม่ได้เป็นส่วนหนึ่งของโปรเจ็กต์

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



0

ที่ Visual Studio 2015 โดยใช้ C ++ สิ่งที่แก้ไขสำหรับฉันthe source file is different from when the module was builtคือปัญหา

  • รีสตาร์ท Visual Studio

0

Debug-> เริ่มต้นโดยไม่ต้องดีบัก

ตัวเลือกนี้ใช้ได้ผลสำหรับฉัน หวังว่านี่จะช่วยได้!


0

ตรวจสอบว่าตำแหน่งที่คุณชี้ไปโดยใช้ mex () ใน Matlab นั้นถูกต้องหรือไม่ (มีไฟล์ lib และ obj ซึ่งแก้ไขเป็นวันสุดท้ายที่คุณรวบรวมไลบรารีใน Visual studio)

หากไม่ใช่กรณีนี้:

ตรวจสอบว่าคุณกำลังรวบรวม Visual studio ในโหมดที่บันทึกไฟล์. lib:

  1. คุณสมบัติ -> คุณสมบัติการกำหนดค่า -> ทั่วไป -> ประเภทการกำหนดค่า -> ไลบรารีแบบคงที่

  2. คุณสมบัติ -> คุณสมบัติการกำหนดค่า -> ทั่วไป -> ส่วนขยายเป้าหมาย = .lib (แทน exe)

ตรวจสอบให้แน่ใจว่าเอาต์พุตและไดเร็กทอรีกลางตรงกับไดเร็กทอรี Matlab ใน

  1. คุณสมบัติ -> คุณสมบัติการกำหนดค่า -> ทั่วไป -> ไดเร็กทอรีเอาต์พุต
  2. คุณสมบัติ -> คุณสมบัติการกำหนดค่า -> ทั่วไป -> ไดเรกทอรีระดับกลาง

0

ในกรณีของฉันคำตอบของ @ Eliott ใช้ไม่ได้ เพื่อแก้ปัญหานี้ฉันได้แยก / รวมจากโครงการไฟล์ที่บกพร่องของฉันและยังทำความสะอาดและสร้างโซลูชันใหม่

หลังจากการดำเนินการเหล่านี้ไฟล์ของฉันที่มีการแก้ไขล่าสุดและตัวดีบักจะถูกกู้คืน

ฉันหวังว่าจะช่วยได้


0

ฉันได้รับปัญหานี้เมื่อทำการดีบักบางครั้งด้วย Visual Studio แต่เมื่อแอปพลิเคชันถูกให้บริการโดย IISIIS (เราต้องพัฒนาในรูปแบบนี้ด้วยเหตุผลที่ซับซ้อนบางประการที่เกี่ยวข้องกับวิธีการที่ผู้พัฒนาดั้งเดิมตั้งค่าโครงการนี้)

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

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