เหตุใดฉันจึงไม่สามารถอ้างอิงไลบรารีของชั้นเรียนได้


86

ฉันมีโซลูชันที่มีเว็บไซต์และไลบรารีคลาสใน Visual Studio 2008

จากนั้นฉันมีโครงการเว็บไซต์อื่นนอกเหนือจากโซลูชันที่ต้องอ้างอิงไลบรารีคลาส ฉันคลิกขวาที่โฟลเดอร์ Bin หรือ Project และเลือก Add Reference จากนั้นเลือก Class Library Project ของฉันซึ่งจะเพิ่ม DLL 15 รายการหรือมากกว่านั้นที่ไลบรารีคลาสต้องการในโฟลเดอร์ bin ของเว็บไซต์ แต่ไม่มีไฟล์. cs ใดที่จดจำคำสั่งที่ใช้

using MyLibrary.MyFolder;

มันบอกว่ามันไม่สามารถแก้ไขได้และ ReSharper บอกว่าสามารถเอาออกได้อย่างปลอดภัยเนื่องจากไม่ได้ใช้งาน

ReSharper สามารถรับรู้ได้ว่าต้องการข้อมูลอ้างอิงและแนะนำว่า "อ้างอิง MyLibrary และใช้ MyFolder" ฉันไม่แน่ใจว่าทำไมจึงแนะนำให้ฉันเพิ่มข้อมูลอ้างอิงที่ฉันมีอยู่แล้ว เมื่อฉันทำตามคำแนะนำฉันได้รับข้อผิดพลาด

"ไม่สามารถอ้างอิงโมดูลอาจเป็นไปได้ว่าการอ้างอิงจะสร้างการอ้างอิงแบบวงกลมระหว่างโปรเจ็กต์"

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


ตรวจสอบเวอร์ชัน. net framework ในไลบรารีคลาสและโปรเจ็กต์ที่คุณกำลังอ้างอิง
Manideep Innamuri

คำตอบ:


164

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


3
ความรุ่งโรจน์! ฉันกำลังสร้างโซลูชันของฉันเป็น 4.5 และกำลังเชื่อมโยงกับ 4.0 เนื่องจากข้อกำหนด 4.0 ในปัจจุบันของเราฉันจึงลดระดับโซลูชันใหม่เป็น 4.0 และตอนนี้โครงการอื่น ๆ ของฉันก็ไม่มีปัญหาในการต่อต้าน +1 เพื่อช่วยให้ฉันมีสติ!
David Peterson

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

1
ไม่ได้คาดหวังว่าปัญหาจะได้รับการแก้ไข! Cool enuf
Irfan

1
จากนั้น Microsoft ควรพูดสิ่งนี้และรวมตัวเลือกเพื่อวางไว้ในเวอร์ชันเดียวกัน
PRMan

1
บันทึกวันของฉัน! VisualStudio จะไม่แจ้งเตือนเตือนฉันเกี่ยวกับเรื่องนั้น :(
Reuel Ribeiro

86

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

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

สิ่งที่ได้ผลจริงคือการเปิดโปรเจ็กต์ใน Visual Studio ปิดแท็บที่เปิดอยู่ทั้งหมดแล้วปิดมันลง

ก่อนที่ฉันจะเปิดแท็บทิ้งไว้เพราะฉันไม่คิดว่ามันสำคัญ (และฉันแทบจะไม่เคยปิดแท็บที่ฉันใช้อยู่เลย)


เพียงแค่รีสตาร์ท VS ได้ผลสำหรับฉัน สาเหตุของปัญหานั้นคือ Project / Namespace เปลี่ยนชื่อการรีแฟคเตอร์ทริกเกอร์จุดบกพร่องใน R #
mbx

ที่ได้ผลสำหรับฉันด้วย ฉันปิดแท็บทั้งหมดตามที่คุณพูดแล้วรีสตาร์ท IDE และ voila ของฉันฉันสามารถอ้างอิงไลบรารีคลาสของฉันได้แล้ว ขอขอบคุณ.
yuva


8

ฉันมีปัญหาที่คล้ายกันการอ้างอิงทั้งหมดของฉันจะถูกบั๊กโดย Resharper หรือไม่ - วิธีแก้ปัญหาที่ได้ผลสำหรับฉันคือการล้าง Resharper Cache จากนั้นรีสตาร์ท VS

tools-> options-> resharper-> options-> general-> คลิกปุ่ม clear caches และรีสตาร์ท VS


4

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

ประเด็นของฉันคือ: แทนที่จะตำหนิ ReSharper หรือ VS อาจเป็นความคิดที่ดีที่จะตรวจสอบอีกครั้งว่าไม่มีการอ้างอิงแบบวงกลมจริงๆหรือไม่ บ่อยครั้งที่คลาสที่มีชื่อเดียวกันในโมดูลที่แตกต่างกันอาจทำให้เกิดความสับสนและมักเป็นอาการของการออกแบบที่ไม่ดี (เช่นในกรณีของฉัน)


+1 ในกรณีของฉันสองโปรเจ็กต์ที่มีเนมสเปซต่างกันถูกคอมไพล์เป็น. exe ที่มีชื่อเดียวกัน (ชื่อแอสเซมบลีในแท็บแอปพลิเคชันใน Visual Studio) - เนื่องจากโปรเจ็กต์การโอนย้ายทำให้ (บางส่วน) มีความหมาย MSBuild จากบรรทัดคำสั่งทำให้เรามีเบาะแสเดียวที่ไม่เป็นประโยชน์ซึ่งทำให้เราสงสัยไปชั่วขณะ: The type or namespace name 'A' does not exist in the namespace 'B'. โปรดทราบว่าไม่มีคำเตือนสำหรับสิ่งนี้ ...
จอนโน

3

ดูเหมือนจะเป็นปัญหาที่คล้ายกันกับ ReSharper:

http://www.jetbrains.net/devnet/thread/275827

ตามที่ผู้ใช้รายหนึ่งในเธรดการบังคับให้บิวด์แก้ไขปัญหา (CTRL + Shift + B) หลังจากบิลด์แรก ..

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


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

3

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

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


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

3

หลังจากยืนยันว่ามีการใช้ asp.net เวอร์ชันเดียวกัน ฉันลบโครงการออก ทำความสะอาดโซลูชันและเพิ่มโครงการใหม่ นี่คือสิ่งที่ได้ผลสำหรับฉัน


ฉันมีปัญหาเดียวกันและดูเหมือนจะช่วยได้ ค่อนข้างแปลก
inexcitus

2

หากคุณกำลังอ้างถึงแอสเซมบลีสำหรับโปรเจ็กต์ที่อยู่ในโซลูชันเดียวกันให้เพิ่มการอ้างอิงโปรเจ็กต์ (โดยใช้แท็บ "โปรเจ็กต์") แทนที่จะเรียกดู dll ในโฟลเดอร์ \ bin \ Debug (หรือ \ bin \ Release) (โดยใช้ แท็บ "เรียกดู") ดูภาพหน้าจอด้านล่าง เรียกดูไฟล์แอสเซมบลี / dll เท่านั้นหากถือว่าเป็นแอสเซมบลีภายนอก

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


2

ฉันลบ * .csproj.user (ไฟล์ resharper) ของโปรเจ็กต์ของฉันจากนั้นปิดแท็บทั้งหมดแล้วเปิดใหม่ หลังจากนั้นฉันก็สามารถรวบรวมโปรเจ็กต์ของฉันได้และไม่มีคำเตือนของ resharper


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

ฉันต้องสร้างโปรเจ็กต์ของฉันใหม่ตั้งแต่เริ่มต้น ... คิดว่าฉันทำไม่กี่อย่างเพื่อถอนการติดตั้ง / ติดตั้งใน NuGet ในโครงการที่ค่อนข้างใหม่
Adam Nofsinger

การลบและสร้างการอ้างอิงใหม่ได้ผลสำหรับฉันการลบไฟล์โปรเจ็กต์แบบเต็มอาจเกินความจำเป็น
danjuggler

2

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

หมดประโยชน์ .... จนกระทั่ง!

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

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

เนื่องจากความผิดพลาดเกิดขึ้นในช่วงต้นของชื่อจึงไม่ปรากฏในรายชื่อคลาส intellisense เมื่อฉันเริ่มพิมพ์

เช่น

ชื่อชั้น: Message.cs

คำประกาศ:

public class Massage
{
    //code here

}

ในภาพรวมและในแบบอักษรขนาดเล็กการนวดจะมีลักษณะเหมือนกับข้อความ

การพิมพ์ M แสดงรายการคลาสมากเกินไปฉันจึงพิมพ์ e ซึ่งไม่ปรากฏในเวอร์ชันที่พิมพ์ผิดซึ่งทำให้รู้สึกว่าคอมไพเลอร์ไม่ได้เลือกคลาส


โดยพื้นฐานแล้วคุณพิมพ์ผิด นั่นไม่เป็นประโยชน์กับคนอื่นเลยจริงๆ
TylerH

0

ฉันมีปัญหาคล้ายกันใน VS 2010 เมื่อสร้างโครงการทดสอบสำหรับแอปพลิเคชัน MVC 2 อาการเหมือนกัน

ข้อความจาก ReSharper ค่อนข้างทำให้เข้าใจผิด ชั่วขณะหนึ่งฉันเพิกเฉยต่อ ReSharper โดยสิ้นเชิงและทำ "วิธี VS ด้วยตนเอง":

  1. ฉันทำความสะอาดน้ำยา
  2. ฉันเพิ่มการอ้างอิงไปยังโครงการ MVC ด้วยตนเอง
  3. ฉันเพิ่มคำสั่งการใช้ด้วยตนเอง
  4. ctrl-shift-b

ในขั้นตอนนี้ฉันพบข้อผิดพลาดในการคอมไพล์: ฉันควรอ้างอิงการSystem.Web.Mvcประกอบในโครงการทดสอบของฉัน (ถอนหายใจ) การเพิ่มการอ้างอิงนี้ทำให้โครงการคอมไพล์ ปัญหา ReSharper ยังคงอยู่ แต่นักวิ่งทดสอบ ReSharper ใช้งานได้

เมื่อฉันรีสตาร์ท VS ข้อผิดพลาด ReSharper ก็หายไปด้วย ฉันไม่แน่ใจว่าจำเป็นต้องรีสตาร์ทหรือไม่เพียงแค่ปิดไฟล์. cs ก็เพียงพอแล้ว

จากนี้ไปเมื่อฉันเห็นข้อความ ReSharper

ไม่สามารถอ้างอิงโมดูล อาจเป็นไปได้ว่าการอ้างอิงจะสร้างการอ้างอิงแบบวงกลมระหว่างโครงการ

ฉันจะอ่าน

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


0

การแก้ไขที่เป็นไปได้อีกอย่างที่ใช้ได้ผลสำหรับฉัน:

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

  • วางการอ้างอิงถึง X จากทั้ง A และ B
  • สร้างการอ้างอิงใหม่ถึง X ใน B
  • สร้างการอ้างอิงใหม่ถึง X ใน A

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


น่าสนใจ แต่จริงใน VS2015 ขอบคุณ!
Scott Nimrod

0

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


0

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

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

หากยังใช้งานไม่ได้การลบไฟล์ suo (โดยปกติจะพบในที่เดียวกับโซลูชัน) บังคับให้ Visual Studio รับไฟล์ทั้งหมดจากแหล่งที่มา (และสร้างไฟล์ suo ใหม่ในภายหลัง)

หากไม่ได้ผลให้ลองปิดไฟล์ที่เปิดอยู่ทั้งหมดแล้วปิด Visual studio เมื่อคุณเปิด Visual studio ครั้งต่อไปควรได้รับการแก้ไข มีข้อบกพร่องของ resharper ที่ได้รับการแก้ไขด้วยวิธีนี้


0

เมื่อเร็ว ๆ นี้ฉันได้พบกับปัญหาที่คล้ายกัน ฉันกำลังทำงานใน Visual Studio 2015 กับ Resharper Ultimate 2016.1.2 ฉันพยายามเพิ่มคลาสใหม่ในฐานรหัสของฉันในขณะที่พยายามอ้างอิงคลาสจากแอสเซมบลีอื่น แต่ Resharper จะแสดงข้อผิดพลาดสำหรับแพ็คเกจนั้น

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

การเพิ่มคีย์เวิร์ด 'global ::' ก่อนเนมสเปซที่ต้องการช่วยให้ฉันสามารถอ้างอิงคลาสที่ฉันต้องการได้ รายละเอียดเพิ่มเติมสามารถพบได้ในหน้าที่ระบุไว้ด้านล่าง:

https://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx


0

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

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


-1

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


-1

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

สิ่งที่ฉันต้องการจะทำคือเพิ่มโครงการใหม่> Visual C #> ห้องสมุดชั้น และไลบรารีคลาสที่เพิ่มใหม่นี้เป็นไลบรารีที่ถูกต้องและสามารถเพิ่มเป็นข้อมูลอ้างอิงกับโปรเจ็กต์ใด ๆ ได้


-4

คุณอาจลืมใส่ข้อมูลอ้างอิงไลบรารีคลาสที่คุณต้องการนำเข้า

คลิกขวาที่ไลบรารีคลาสที่คุณต้องการนำเข้า (ซึ่งมีไลบรารีคลาสที่นำเข้าหลายคลาส), -> Add-> Reference (เลือก Projects-> Solution-> เลือกไลบรารีคลาสที่คุณต้องการนำเข้าจาก -> ตกลง)

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