รับ "ประเภทหรือชื่อเนมสเปซไม่พบ" แต่ทุกอย่างดูโอเคไหม


276

ฉันได้รับ:

ไม่พบชื่อประเภทหรือเนมสเปซ

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

ความคิดใด ๆ ที่ทำให้เกิดเหตุการณ์เช่นนี้ซึ่งดูเหมือนว่าฉันกำลังทำสิ่งที่ถูกต้องอ้างอิง & usingคำสั่ง?

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


อาจทำงานเพื่อปิดและเริ่ม Visual Studio ใหม่ บางครั้งดูเหมือนว่าจะได้รับ "Stuck"
Ris Adams

2
คำแนะนำ: 1) โหลดแอสเซมบลีหรือไม่ 2) แอสเซมบลีที่โหลดจับคู่กับแอสเซมบลีกำเนิดหรือไม่ 3) "ใช้" คำสั่งชี้ไปที่การอ้างอิงที่ถูกต้องเก่าหรือไม่มีเลย? ในโซลูชันทั้งหมด (ไลบรารีคลาสและโครงการทั้งหมด) 5) ตรวจสอบการตั้งค่าโครงการสำหรับตัวเลือกการสร้างเวอร์ชันกรอบงาน Net Framework (ทำงานร่วมกันเป็นทีมในรูปแบบของปัญหานี้คุณต้องยอมรับ net framew สร้างเวอร์ชันทั้งสองด้าน) 6) หลังจากนั้นทำความสะอาดและสร้างโดยแยกต่างหากและสุดท้ายรวมการอ้างอิงทั้งหมด ไปยังโครงการปลายทาง / ห้องสมุดชั้น ฉันควรทำงาน!
เฟลิกซ์ Aballi

ตรวจสอบว่าคุณได้อ้างอิง dll dll ตั้งอยู่ภายในโฟลเดอร์ช่องเก็บของไดเรกทอรีโซลูชันของคุณ
Abhishek Poojary

คำตอบ:


471

นี่อาจเป็นผลมาจากความเข้ากันไม่ได้ของเฟรมเวิร์ก. Net ระหว่างสองโครงการ

สามารถเกิดขึ้นได้สองวิธี:

  1. โครงการโปรไฟล์ลูกค้าที่อ้างอิงโครงการกรอบเต็ม หรือ
  2. เวอร์ชันเฟรมเวิร์กที่เก่ากว่าซึ่งกำหนดเป้าหมายเป็นเวอร์ชันเฟรมเวิร์กที่ใหม่กว่า

ตัวอย่างเช่นมันจะเกิดขึ้นเมื่อแอ็พพลิเคชันถูกตั้งค่าให้กำหนดเป้าหมายกรอบงาน. Net 4 Client Profile และโครงการที่อ้างอิงถึงเป้าหมายในกรอบงาน. Net 4 แบบเต็ม

ดังนั้นเพื่อให้ชัดเจน:

  • โครงการ A กำหนดเป้าหมายเฟรมเวิร์กโปรไฟล์ลูกค้า
  • โครงการ A อ้างอิงโครงการ B
  • โครงการ B กำหนดเป้าหมายเป็นเฟรมเวิร์กแบบเต็ม

โซลูชันในกรณีนี้คือการอัพเกรดเป้าหมายเฟรมเวิร์กของแอปพลิเคชัน (โครงการ A) หรือลดระดับเป้าหมายของแอสเซมบลีที่อ้างอิง (โครงการ B) มันไม่เป็นไรสำหรับแอปเฟรมเวิร์กเต็มรูปแบบในการอ้างอิง / ใช้แอสเซมบลีเฟรมเวิร์กโปรไฟล์ไคลเอ็นต์ แต่ไม่ใช่วิธีอื่น ๆ (โปรไฟล์ไคลเอ็นต์ไม่สามารถอ้างอิงแอสเซมบลีเป้าหมายแบบเต็มเฟรม)

โปรดทราบว่าคุณยังสามารถได้รับข้อผิดพลาดนี้เมื่อคุณสร้างโครงการใหม่ใน VS2012 หรือ VS2013 (ซึ่งใช้. Net 4.5 เป็นเฟรมเวิร์กเริ่มต้น) และ:

  • โครงการอ้างอิงใช้. Net 4.0 (เป็นเรื่องปกติเมื่อคุณโอนย้ายจาก VS2010 เป็น VS2012 หรือ VS2013 จากนั้นคุณเพิ่มโครงการใหม่)

  • โครงการที่อ้างอิงใช้เวอร์ชันที่สูงกว่าเช่น 4.5.1 หรือ 4.5.3 (คุณได้กำหนดเป้าหมายโครงการที่มีอยู่ของคุณเป็นเวอร์ชันล่าสุดอีกครั้ง แต่ VS ยังคงสร้างโครงการใหม่ที่กำหนดเป้าหมายเป็น v4.5 จากนั้นคุณอ้างอิงโครงการเก่าเหล่านั้นจาก โครงการใหม่)


2
ยอดเยี่ยม - ใช้งานได้ - ฉันต้องอัพเกรดไคลเอ็นต์แอป WPF ของฉันให้ใช้. NET Framework 4 แบบเต็มไม่แน่ใจว่าสิ่งนี้จะส่งผลกระทบต่อการใช้งานของลูกค้าหรือไม่ ฉันลองปรับลดรุ่นห้องสมุดฉันต้องเป็น. Net 4 Client Profile แต่เมื่อฉันทำสิ่งนี้มันมีปัญหาที่คล้ายกันกับห้องสมุดบุคคลที่ 3 Quartz.net ล่าสุดที่ฉันเพิ่งจะเริ่มใช้งาน ดังนั้นดูเหมือนว่าการใช้ Quartz.net ในโครงการห้องสมุดของฉันในที่สุดก็บังคับให้ฉันต้องใช้กรอบ. Net 4 แบบเต็มในแอพ UI WPF ของฉัน
เกร็ก

3
ขอบคุณ - ตอนนี้เพิ่งช่วยได้ ฉันเพิ่งย้ายโซลูชันไปยัง VS2012 จาก VS2010 และได้สร้างไลบรารีคลาสใหม่ใน VS2012 ทันใดนั้นฉันก็ได้รับข้อผิดพลาดนี้และแน่นอนว่าเป็นเพราะห้องสมุดคลาสใหม่มีเป้าหมายเป็น. NET 4.5 ในขณะที่โครงการอ้างอิงนั้นมีเป้าหมายเป็น. NET 4.0 ปรับลดไลบรารีใหม่เป็นเป้าหมาย 4.0 แก้ไข
ริชาร์ด

22
จะดีจริงๆถ้า Visual Studio จะให้คำแนะนำเกี่ยวกับเรื่องนี้!
Jason Coyne

3
แม้ว่าคำตอบนี้จะให้คำอธิบายที่ดีเกี่ยวกับสิ่งที่ต้องทำ ... มันไม่มีคำแนะนำเกี่ยวกับวิธีการทำซึ่งจะเป็นการเพิ่มที่ดี
Jon Story

1
แม้แต่สิ่งที่ดีที่สุดของเราก็บางครั้งก็ไม่จำเป็นต้องทำงานบางอย่าง ฉันไม่แน่ใจว่าฉันไม่เคยต้องการเปลี่ยนกรอบงานและถึงตอนนี้ฉันได้พบมันแล้ว แต่ก็ไม่เคยเกิดขึ้นกับฉันมาก่อน ไม่ใช่ตัวแบ่งข้อตกลงสำหรับคำตอบเพียงแค่ฉันพบว่าคำตอบที่ดีที่สุดทำหน้าที่เป็นร้านค้าครบวงจรสำหรับ 'อธิบายปัญหาระบุวิธีแก้ปัญหาแสดงวิธีการแก้ไข'
Jon Story

50

การติดตั้งแพ็กเกจ nuget ใหม่นั้นเป็นเคล็ดลับสำหรับฉัน หลังจากที่ฉันเปลี่ยน. NET Framework เวอร์ชันให้ตรงกันกับทุกโครงการแล้วแพคเกจ nuget (โดยเฉพาะ Entity Framework) บางแพคเกจยังคงติดตั้งสำหรับเวอร์ชันก่อนหน้า คำสั่งนี้ใน Packages Manager Console ติดตั้งแพ็กเกจใหม่สำหรับโซลูชันทั้งหมด:

Update-Package reinstall

ปัญหาที่ฉันเผชิญคือฉันสร้างโซลูชันใหม่ซึ่งฉันได้เพิ่มแพ็คเกจ Nuget รุ่นอื่นที่ไม่ใช่รุ่นอื่นที่ใช้งานอยู่ จากนั้นเมื่อฉันวิ่งUpdate-Package -reinstallฉันมีข้อผิดพลาดหลายอย่างในโซลูชันทั้งหมดซึ่งรวมถึงแพ็คเกจที่แตกต่างกัน ฉันอัปเดตทั้งหมดแล้วในที่สุดมันก็วิ่งผ่าน มันยังแก้ไขการอ้างอิงในไฟล์ package.json จาก 45 เป็น 452 เนื่องจากฉันยังเปลี่ยนเวลาเป้าหมายรุ่นที่ผ่านมา
ÁdámKovács

ทำงานให้ฉันและฉันต้องลบ Sytems.Net.Http ออกจากการอ้างอิงในขณะที่ลดระดับ
Binil Anto

1
นี่ก็เป็นสิ่งที่ใช้ได้ผลสำหรับฉัน เรียกใช้คำสั่งจากนั้นยกเลิกการเปลี่ยนแปลงที่ค้างอยู่ที่เกิดขึ้นและ sln ของฉันกลับมาเป็นปกติ
foremaro

มันใช้งานได้สำหรับฉันมันแสดงให้ฉันเห็นการอ้างอิงที่ไม่สนับสนุนกรอบการทำงานปัจจุบันของฉัน
Adleri

สิ่งนี้ใช้ได้กับฉันและข้อผิดพลาดที่หายไปนั้นไม่เกี่ยวข้องกับแพคเกจใด ๆ ที่ติดตั้งไว้
CAD bloke

31

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


ขอแนะนำเคล็ดลับนี้เมื่อใดก็ตามที่พบปัญหาการอ้างอิงภายในโซลูชัน VS มันแก้ไขปัญหาของฉันใน VS2017 หลังจากที่ฉันเพิ่มในโครงการใหม่ที่กำหนดเป้าหมายเป็น. NET Framework รุ่นที่สูงขึ้น ฉันเดิมพันว่ามีการแคชบางส่วนถูกล้างออก
คะแนน

1
เหมือนกันที่นี่: นี่คือสิ่งที่ช่วย (ฉันยังไม่ได้มีปัญหารุ่นอื่น ๆ ) ฉันได้รับข้อความแสดงข้อผิดพลาดสำหรับทุกไฟล์ที่เปิดขึ้นถึง 400+ ... ถึงแม้ว่าการสร้าง / การเรียกใช้จะไม่มีปัญหา นอกจากนี้: การวิเคราะห์ทั่วทั้งโซลูชั่นของ ReSharper ยังแสดงข้อผิดพลาดเดียวกัน
ไมค์

ช่วยฉันด้วยเคล็ดลับนี้เช่นกัน ไม่ได้มีความแตกต่างรุ่นเป้าหมายใด ๆ อาคารเป็นไปได้ไรเดอร์ไม่ได้แสดงปัญหาใด ๆ แต่ VS ยังคงยืนยันว่าการอ้างอิงโครงการทั้งหมดหายไป ...
Daniel Lerps

คอมไพเลอร์คอมไพล์ตามคำสั่งการสร้างโครงการดังนั้นหากมีข้อผิดพลาดของแท้ในโครงการหนึ่งมันอาจหลงทางในทะเลประเภท "herring-red หรือ" namespace ไม่สามารถหาข้อผิดพลาด "- เพราะมันเพิ่งออกเมื่อพบ ข้อผิดพลาดและไม่ได้รับการอัปเดตข้อมูลอ้างอิง หากไม่มีข้อผิดพลาดมากเกินไปคุณควรจะสามารถค้นหาข้อผิดพลาดของแท้ได้ น่าเสียดายที่มีพวก 100s สำหรับฉันดังนั้นเคล็ดลับนี้ช่วยฉันได้จริงๆ ฉันเดาว่า intelisense ไม่สนใจคำสั่ง build และเพียงรวบรวมโครงการเป็นเอกเทศและนั่นเป็นเหตุผลที่คุณไม่ได้รับข้อผิดพลาด intelisense
Kev

29

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

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

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

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

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

เพื่อทำสิ่งนี้:

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

สิ่งนี้ทำให้แน่ใจว่าโครงการห้องสมุดจะถูกสร้างขึ้นก่อน


2
ขอบคุณสำหรับคำแนะนำในการดูคำเตือน ปัญหาของฉันคือโครงการทดสอบของฉันจำเป็นต้องติดตั้งแพคเกจ NuGet สำหรับ Bcl เพราะโครงการหลักของฉันอ้างถึงมัน
คิม

ขอบคุณ! สิ่งนี้กระตุ้นให้ฉันพบปัญหาที่ฉันมี กลับกลายเป็นว่าฉันมีสองอ้างอิงถึงโครงการพึ่งพาและหนึ่งที่ได้รับความสำคัญคือ DLL ที่สร้างขึ้นก่อนหน้านี้ในโฟลเดอร์ช่องเก็บ ฉันลบ DLL และการอ้างอิงอันธพาลและทำการสร้างใหม่ทุกอย่างที่รวบรวมอย่างถูกต้องแล้ว
Chris Davis

7

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

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


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

ทำความสะอาดตามด้วยการสร้างใหม่แก้ไขปัญหา อย่างไรก็ตามปัญหานี้ปรากฏขึ้นทุกวัน อย่างน้อยฉันก็สามารถทำสิ่งต่าง ๆ ให้เสร็จได้จนกว่าฉันจะแยกแยะอย่างสมบูรณ์
Valamas

5

สถานการณ์ที่ยากขึ้นที่ฉันพบคือ: โปรเจคหนึ่งกำหนดเป้าหมายเป็นเฟรมเวิร์ก 4.0 แบบเต็มพร้อมกับMicrosoft.Bcl.Asyncแพ็คเกจ โครงการสองกำหนดเป้าหมายเป็นกรอบการทำงานแบบเต็ม 4.0 แต่จะไม่รวบรวมเมื่ออ้างอิงโครงการหนึ่งคลาส

เมื่อฉันติดตั้งแพ็คเกจ Async NuGet ในโปรเจ็กต์ที่สอง


1
อ่าขอบคุณสำหรับสิ่งนี้ โปรเจ็กต์พกพาของฉันคอมไพล์ได้ดีบน Xamarin Studio ในขณะที่มันจะล้มเหลวใน Visual Studio เพราะสิ่งนี้ ฉันคิดว่า XS ทำ 'วิเศษ' เพื่อให้รวบรวมเมื่อการอ้างอิงโดยนัยหายไป
Nicola Iarocci

5

ในกรณีของฉันฉันค้นหาการอ้างอิงใน VisualStudio มีรูปสามเหลี่ยมและเครื่องหมายอัศเจรีย์เป็นภาพนี้

จากนั้นฉันคลิกขวาลบมันและเพิ่มการอ้างอิง dll อย่างถูกต้องอีกครั้งปัญหาได้รับการแก้ไข


4

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


4

ฉันมีปัญหาที่คล้ายกัน: คอมไพเลอร์ไม่สามารถตรวจจับโฟลเดอร์ภายในโครงการเดียวกันดังนั้นการใช้คำสั่งเชื่อมโยงไปยังโฟลเดอร์นั้นจึงทำให้เกิดข้อผิดพลาด ในกรณีของปัญหาที่เกิดขึ้นมาจากการเปลี่ยนชื่อโฟลเดอร์ แม้ว่าฉันจะอัปเดตเนมสเปซของคลาสทั้งหมดภายในโฟลเดอร์นั้น แต่ข้อมูลโครงการก็ไม่สามารถอัปเดตได้ ฉันลองทุกอย่าง: การลบไฟล์. suo และโฟลเดอร์ bin และ obj การทำความสะอาดวิธีการแก้ปัญหาการโหลดซ้ำโครงการ - ไม่มีอะไรช่วย ฉันแก้ไขปัญหาด้วยการลบโฟลเดอร์และคลาสภายในสร้างโฟลเดอร์ใหม่และสร้างคลาสใหม่ในโฟลเดอร์ใหม่นั้น (เพียงแค่ย้ายคลาสภายในโฟลเดอร์ใหม่ไม่ได้ช่วย)

PS: ในกรณีของฉันฉันกำลังทำงานกับโปรแกรมประยุกต์บนเว็บ แต่ปัญหานี้อาจเกิดขึ้นในโครงการประเภทต่าง ๆ


3

[Facepalm] ปัญหาของฉันคือฉันได้เพิ่มการพึ่งพาในวิธีการทำสิ่ง C ++

ไปที่โครงการที่จะไม่สร้างเปิดโฟลเดอร์ 'อ้างอิง' ในโซลูชัน Explorer และดูว่าการอ้างอิงของคุณอยู่ในรายการหรือไม่

ถ้าไม่คุณสามารถ 'เพิ่มการอ้างอิง' และเลือกการพึ่งพาในแท็บโครงการ

Boom Shankar


2

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


2

ฉันพบปัญหานี้เมื่ออัพเกรดโครงการที่มีอยู่จาก VS2008 เป็น VS2012 ฉันพบว่าสองโปรเจ็กต์ (เพียงสองโปรเจคที่ฉันสร้าง) กำลังกำหนดเป้าหมาย. Net Frameworks ที่แตกต่างกัน (3.5 และ 4.0) ฉันแก้ไขปัญหานี้ในแท็บแอปพลิเคชันของโครงการโดยตรวจสอบให้แน่ใจว่าโครงการทั้งสองมี ". NET Framework 4" ในกล่องกรอบงานเป้าหมาย


2

มีข้อผิดพลาดเดียวกันเรื่องราวของฉันมีดังนี้: หลังจากการรวมที่ไม่ดี (ผ่าน git) หนึ่งในไฟล์. csproj ของฉันมีcompileรายการที่ซ้ำกันเช่น:

<Compile Include="Clients\Tree.cs" />
<Compile Include="Clients\Car.cs" />
<Compile Include="Clients\Tree.cs" />        //it's a duplicate

หากคุณมีทางออกที่ดีและมีข้อความมากกว่า 300 ข้อความในหน้าต่างข้อผิดพลาดมันยากที่จะตรวจสอบปัญหานี้ ดังนั้นฉันจึงเปิดไฟล์. csproj ที่เสียหายผ่าน notepad และลบรายการที่ซ้ำกันออก ทำงานในกรณีของฉัน


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

2

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

นี่คือวิธีที่ฉันจัดการเพื่อแก้ไขการออก:

  1. ยกเลิกการโหลดโครงการอ้างอิง
  2. เปิดไฟล์. proj ใน VS (ฉันกำลังมองหารายการที่ซ้ำกันตามที่มีคนแนะนำไว้ที่นี่)
  3. โหลดโครงการอีกครั้ง (ฉันไม่ได้เปลี่ยนหรือแม้แต่บันทึกไฟล์ proj เนื่องจากฉันไม่ได้ทำซ้ำ)

1

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


1

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

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

เช่นEntityFramework6.dllเมื่อเทียบกับEntityFramework.dll

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


1

การเพิ่มโซลูชันของฉันลงในการผสมผสานเพราะมันแตกต่างกันเล็กน้อยและใช้เวลาพอสมควรที่จะคิดออก

ในกรณีของฉันฉันเพิ่มคลาสใหม่ลงในโปรเจ็กต์หนึ่ง แต่เนื่องจากไม่ได้ตั้งค่าการเชื่อมการควบคุมเวอร์ชันฉันจึงต้องทำให้ไฟล์เขียนได้นอก Visual Studio (ผ่าน VC) ฉันยกเลิกออกจากการบันทึกใน Visual Studio แต่หลังจากฉันทำไฟล์ที่เขียนได้นอก VS ฉันก็กด Save All อีกครั้งใน VS นี่เป็นสาเหตุทำให้ไฟล์คลาสใหม่ไม่ได้รับการบันทึกในโครงการ .. ไม่ว่า .. การขายเงินยังคงปรากฏเป็นสีน้ำเงินและใช้ได้ในโครงการอ้างอิงแม้ว่าฉันจะพยายามคอมไพล์ไฟล์อีกครั้งและไม่ได้รับ ประเภทไม่พบข้อผิดพลาด การปิดและเปิด Visual Studio ยังคงแสดงให้เห็นถึงปัญหา (แต่ถ้าฉันสังเกตว่าไฟล์คลาสหายไปเมื่อเปิดใหม่)

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


1

ฉันมีปัญหาเดียวกัน คืนหนึ่งโครงการของฉันจะรวบรวมข้อผิดพลาดในเช้าวันถัดไป!

ในที่สุดฉันก็พบว่าสตูดิโอทางสายตาตัดสินใจที่จะ "ปรับแต่ง" การอ้างอิงของฉันและชี้ไปที่อื่น ตัวอย่างเช่น:

System.ComponentModel.ISupportInitialize อย่างใดกลายเป็น "blahblah.System.ComponentModel.ISupportInitialize"

ค่อนข้างหยาบคายสำหรับ vs ที่ต้องทำถ้าคุณเป็นฉัน


1

มันเกิดขึ้นใน Visual Studio 2017

  1. เริ่ม Visual Studio ใหม่
  2. ทำความสะอาดโครงการที่ล้มเหลวในการสร้าง
  3. สร้างโครงการใหม่

1

เคสของฉันเหมือนที่กล่าวไว้ที่นี่ แต่ไม่มีอะไรแก้ไขจนกว่าฉันจะลบการSystem.Coreอ้างอิงออกจากรายการอ้างอิง (ทุกอย่างใช้งานได้ดีถ้าไม่มีมัน)

หวังว่ามันจะช่วยใครซักคนเพราะปัญหานี้ค่อนข้างน่าผิดหวัง


นี่เป็นปัญหาที่แน่นอนสำหรับฉัน ฉันลบ System.Core และสร้างใหม่ข้อผิดพลาดแก้ไขได้ทันทีด้วยตนเอง ขอบคุณหนึ่งล้านที่ช่วยให้ฉันปวดหัวได้มาก
user1959309

1

เพื่อแก้ไขปัญหานี้ยังสามารถช่วยในการลบและสร้าง*.sln.DotSettingsไฟล์ของโซลูชันที่เกี่ยวข้อง


1

ในกรณีของฉันฉันมีคลาสที่ระบุไว้ในโฟลเดอร์ซอร์สที่เหมาะสม แต่ไม่ได้ลงทะเบียนใน Solution Explorer ฉันต้องคลิกขวาที่โปรเจ็กต์> เพิ่มรายการที่มีอยู่และเลือกคลาสนั้นด้วยตนเองว่ามันหายไป จากนั้นทุกอย่างทำงานได้ดี!


1

ในกรณีของฉันปัญหาคือหลังจากเปลี่ยนเนมสเปซเป็นเหมือนกับในโครงการอื่น (โดยเจตนา) ชื่อของแอสเซมบลีก็เปลี่ยนไปเช่นกันโดย VS ดังนั้นจึงมีแอสเซมบลีสองตัวที่มีชื่อเดียวกัน


ฉันจะแก้ไขชื่อชุดประกอบเพื่อเปลี่ยนเป็นชื่อที่ถูกต้องได้อย่างไร
Matt123

1
ในไฟล์โครงการ (.csproj) ด้วยตนเองหรือโดยคลิกขวาที่โครงการ -> Properties
user1121956

0

ในกรณีของฉันฉันมีไฟล์ที่สร้างโดยการพึ่งพาภายนอก (xsd2code) และไฟล์ designer.cs ของมันไม่ได้ถูกประมวลผลโดย VS อย่างถูกต้อง การสร้างไฟล์ใหม่ใน Visual Studio และการวางโค้ดในนั้นทำให้ฉันได้


0

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

  1. ลบแพ็คเกจ nuget ทั้งหมดในโซลูชันของฉัน
  2. ปิดและเปิดโซลูชันของฉันอีกครั้ง
  3. เพิ่มแพ็คเกจ nuget ทั้งหมดอีกครั้ง

เจ็บปวดเล็กน้อย แต่เป็นวิธีเดียวที่ฉันจะทำให้เว็บไซต์ของฉันเผยแพร่สู่ Azure


0

ฉันได้รับข้อผิดพลาดนี้พยายามสร้างบิลด์ด้วยบิลด์ทีม Visual Studio Team Services ที่ทำงานบนเครื่องท้องถิ่นของฉันในฐานะตัวแทน

มันทำงานในพื้นที่ทำงานปกติของฉันได้ดีและฉันสามารถเปิดไฟล์ SLN ภายในโฟลเดอร์ตัวแทนในเครื่องและทุกอย่างก็คอมไพล์ได้

DLL ที่เป็นปัญหาถูกเก็บไว้ภายในโครงการเป็นLib/MyDLL.DLLและอ้างอิงกับสิ่งนี้ในไฟล์ csproj:

<Reference Include="MYDLL, Version=2009.0.0.0, Culture=neutral, PublicKeyToken=b734e31dca085caa">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>Lib\MYDLL.dll</HintPath>
</Reference>

มันกลับกลายเป็นว่ามันไม่ได้ค้นหาไฟล์แม้จะมีเส้นทางบอกใบ้ ฉันคิดว่า msbuild อาจจะดูสัมพันธ์กับไฟล์ SLN แทนที่จะเป็นไฟล์โครงการ

ไม่ว่าในกรณีใดถ้าข้อความที่คุณได้รับCould not resolve this reference. Could not locate the assemblyนั้นต้องแน่ใจว่า DLL นั้นอยู่ในตำแหน่งที่สามารถเข้าถึงได้เพื่อสร้าง msbuild

ฉันชนิดของการโกงและพบข้อความที่กล่าวConsidered "Reference\bin\xxx.dll"และเพิ่งคัดลอก dlls ไปที่นั่นแทน


0

ในกรณีของฉันการเพิ่ม dll เป็นข้อมูลอ้างอิงให้type or namespace name could not be foundข้อผิดพลาด อย่างไรก็ตามการคัดลอกและวางไฟล์ dll โดยตรงในโฟลเดอร์ bin แก้ไขข้อผิดพลาด

ไม่รู้เลยว่าทำไมมันถึงใช้ได้


0

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

ลองใช้ความช่วยเหลือนี้ :)


0

ในกรณีของฉันฉันมีสองโครงการในโซลูชันฉันเพิ่ม sub-namespace ลงในโครงการที่อ้างอิง แต่เมื่อการสร้างฉันไม่ได้สังเกตว่าการสร้างโครงการอ้างอิงล้มเหลวและใช้เวอร์ชันที่สร้างขึ้นสำเร็จครั้งล่าสุดซึ่งไม่ได้ มีเนมสเปซใหม่นี้ดังนั้นข้อผิดพลาดถูกต้องไม่พบเนื่องจากไม่มีวิธีการแก้ปัญหาคือแก้ไขข้อผิดพลาดในโครงการอ้างอิง


0

ฉันทำงานกับ VS 2017 community edition และมีปัญหาเดียวกันกับแพคเกจนักเก็ต CefSharp

ดาวน์โหลดแพคเกจและกู้คืนสำเร็จโครงการสามารถสร้างและรันได้สำเร็จ - เฉพาะมาร์กอัพที่ระบุว่าเนมสเปซไม่รู้จัก

สิ่งที่ฉันต้องทำคือเปิดReferencesส่วนและคลิกที่หนึ่งในเครื่องหมายอัศเจรีย์สีเหลือง

ป้อนคำอธิบายรูปภาพที่นี่

หลังจากนั้นไม่กี่วินาทีข้อผิดพลาดของมาร์กอัปก็หายไป

ป้อนคำอธิบายรูปภาพที่นี่


ฉันคิดว่าคุณจะพบว่าใช้งานได้เฉพาะในกรณีที่แผงคุณสมบัติเปิดอยู่ (คลิกขวาที่การอ้างอิงที่มีปัญหาและเลือกคุณสมบัติ) ทุกคนสามารถอธิบายได้ว่าทำไมจึงใช้งานได้
Qwertie
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.