เหตุใดฉันจึงได้รับไอคอนคำเตือนเมื่อฉันเพิ่มการอ้างอิงไปยังโปรเจ็กต์ปลั๊กอิน MEF


325

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

เมื่อฉันเพิ่มการอ้างอิงไปยัง dll แทนเอาต์พุตการสร้างแอสเซมบลีของปลั๊กอินฉันไม่ได้รับคำเตือนดังกล่าว คำเตือนนี้พยายามจะบอกอะไรฉัน


8
ส่วนใหญ่แล้วสามเหลี่ยมคำเตือนจะมีเคล็ดลับเครื่องมือหรือ (ไม่สำเร็จ) รายการในหน้าต่างข้อผิดพลาด คาดเดาทั้งสองโครงการมีการอ้างอิงที่เข้ากันไม่ได้
Damien_The_Unbeliever

2
คำเตือนใด ๆ ในคอนโซลเมื่อพยายามสร้าง?
Jite

235
ฉันเคยเห็นสิ่งนี้กับโครงการที่กำหนดเป้าหมายเวอร์ชัน. net framwork ที่แตกต่างกัน
mhand

4
@OP คุณช่วยเลือกคำตอบของ kad81 เป็นคำตอบที่ถูกต้องได้ไหม
แอนดี้

5
สิ่งนี้ทำให้ฉันได้รับเสมอ การเพิ่มโปรเจ็กต์ใหม่ในโซลูชัน. NET 4 และค่าเริ่มต้นคือ 4.5
Robin French

คำตอบ:


680

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


13
สิ่งที่ฉันต้องรู้คือเหตุใด Visual Studio จึงยอมรับการเพิ่มการอ้างอิงเหล่านั้น
Anders Lindén

16
ฉันใช้ VS 2015 และปัญหายังคงมีอยู่ ฉันเสียเวลาไปครึ่งชั่วโมงจนกระทั่งมาที่นี่
Alisson

16
ไม่มีแม้แต่ข้อความวางเมาส์หรือสร้างข้อผิดพลาดที่อธิบายว่าปัญหาคืออะไร
matao

7
สามารถยืนยันได้ว่านี่คือต้นตอของปัญหา นอกจากนี้ยังสามารถยืนยันได้ว่า Visual Studio 2017 พร้อมการอัปเดต 15.3 ยังไม่ได้แก้ไขปัญหาการไม่แสดงข้อความที่มีความหมายจริง น่ารำคาญมาก.
Greg R Taylor

4
@matao เห็นด้วย! มันน่ารำคาญฉันไม่สามารถรับรายละเอียดใด ๆ เกี่ยวกับข้อผิดพลาด ...
nterry

74

พบปัญหาเดียวกันกับ ASP.Net Web App และโปรเจ็กต์คลาสไลบรารีสองโครงการซึ่งจำเป็นต้องอ้างอิงภายใน Web App ฉันไม่มีข้อมูลว่าเหตุใดการสร้างจึงล้มเหลวและการอ้างอิงไม่ถูกต้อง

แนวทางแก้ไขคือเพื่อให้แน่ใจว่าโครงการทั้งหมดมีกรอบเป้าหมายเดียวกัน:

ใน Visual Studio 2015- คลิกขวาโครงการ> คุณสมบัติ> แอปพลิเคชัน> กรอบเป้าหมาย

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

Web App ของฉันกำหนดเป้าหมายเป็น. Net 4.5 ในขณะที่อีกสองโครงการคลาสไลบรารีที่ขึ้นต่อกันกำหนดเป้าหมายเป็น. Net v4.5.2


44

สำหรับทั้งสองโครงการ (หรือทั้งหมด) ที่คุณต้องการใช้ร่วมกัน:

คลิกขวาที่โครงการ> Properties> Application> Target .NET framework

ตรวจสอบให้แน่ใจว่าโปรเจ็กต์ของคุณทั้งสอง (หรือทั้งหมด) ใช้. NET framework เวอร์ชันเดียวกัน


สมบูรณ์แบบสำหรับฉัน! ฉันมีโครงการ MVC ที่มี. NET Framework 4.5.2 และไลบรารีคลาสของฉันที่อ้างถึงคือ. NET Framework 4.7
Mike Upjohn

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

41
  1. ตรวจสอบให้แน่ใจว่าทุกเวอร์ชันเหมือนกันสำหรับแต่ละโปรเจ็กต์คลิกแต่ละโปรเจ็กต์และดูเวอร์ชันที่นี่ Project> Properties> Application> Target .NET framework

  2. ก. ไปที่ Tools> Nuget Package Manager> Package Manager Console Type Update-Package - ติดตั้งใหม่ (ถ้าไม่ทำงานให้ไปที่2.b )

    ข. นี่เป็นเรื่องสำคัญ แต่ความเป็นไปได้ที่ใหญ่ที่สุดที่จะได้ผล ลบ <Target> อาจมีหลายบรรทัด </ Target> ที่มักพบที่ส่วนล่างของ. csproj

  3. บันทึกโหลดและสร้างโซลูชัน


1
ขอบคุณสำหรับสิ่งนั้นข้อความแสดงข้อผิดพลาดที่ดีใน Visual Studio เกี่ยวกับเวอร์ชัน. Net จะไม่หลงทางที่นี่!
colmde

1
@colmde น่าสนใจหากคุณทำความสะอาดโซลูชันหน้าต่างผลลัพธ์จะแสดงข้อความต่อไปนี้: 'แพ็คเกจถูกกู้คืนโดยใช้. NetFramework XXX แทนกรอบงานเป้าหมาย. NetFramework XXX แพคเกจอาจไม่สามารถใช้งานร่วมกับโครงการของคุณได้อย่างสมบูรณ์ '
elszeus

1
ส่วนที่ 2.b ซึ่งไม่ได้ระบุไว้ในคำตอบอื่น ๆ เป็นสิ่งสำคัญสำหรับฉัน! 2.b ลบ <Target> อาจมีหลายบรรทัด </ Target> มักพบที่ส่วนล่างของ. csproj
shelbypereira

1
ตอนที่ 2 b บ้าไปแล้ว แต่ได้ผล! ขอบคุณ
Elo

1
ขอบคุณ 2.b ทำเคล็ดลับให้ฉันด้วย จะไม่คิดออกด้วยตัวเอง
Henrik Clausen

23

ติดตั้งแพ็คเกจทั้งหมดอีกครั้งในทุกโปรเจ็กต์ของโซลูชันปัจจุบัน:

Update-Package -Reinstall

2
แม้ว่าคำแนะนำนี้ไม่ได้ช่วยแก้ปัญหาของฉันโดยตรง แต่คำแนะนำนี้ก็ชี้ให้ฉันไปในทิศทางที่ถูกต้องสำหรับสถานการณ์ของฉัน สำหรับผู้ที่อาจช่วยได้ฉันต้องเปลี่ยนซอร์สแพ็คเกจ NuGet ของฉันเป็น v3 สำหรับ Update-Package เพื่อค้นหาเวอร์ชันที่เหมาะสมในการดาวน์โหลด: docs.nuget.org/consume/package-manager-dialog#package-sources
John Lee

3
มันลบแพ็คเกจทั้งหมดติดตั้งและสามเหลี่ยมสีเหลืองก็กลับมา
Anders Lindén

8

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


7

สำหรับฉันฉันพบปัญหานี้เมื่ออ้างถึงไลบรารีคลาส. NET Standard 2.0 ในแอปพลิเคชันคอนโซล. NET Framework 4.7.1 ใช่เฟรมเวิร์กแตกต่างกัน แต่เข้ากันได้ (.NET Standard ควรจะกระตุกกับทั้ง. NET Core และ. NET Framework) ฉันพยายามทำความสะอาดสร้างใหม่ลบและอ่านการอ้างอิงโครงการ ฯลฯ ... แต่ไม่ประสบความสำเร็จ . ในที่สุดการออกจาก Visual Studio และการเปิดอีกครั้งจะช่วยแก้ปัญหาได้


สถานการณ์คล้ายกัน! .NETCore 3.0 และ. NETStandard 2.0 ไลบรารีคอมไพล์ใหม่ลบและอ่านไม่มีทางจนกว่าฉันจะรีสตาร์ท VS. ขอบคุณ
เดวิด

5

ตรวจสอบ NETFramework ของ dll ที่อ้างถึงและโครงการที่คุณกำลังเพิ่ม DLL เช่น DLL ==> supportedRuntime version = "v4.0" Project ==> supportedRuntime version = "v3.0"

คุณจะได้รับไอคอนคำเตือน วิธีแก้ไข: สร้างความสอดคล้องของเวอร์ชัน dll


5

ลองปิดและเปิด VS

ดูเหมือนจะโง่ แต่หลังจาก 1 ชั่วโมงของการทำตามข้างต้นและพบว่าทุกอย่างเรียบร้อยดี ฉันรีสตาร์ท VS 2017 และปัญหาก็หายไป


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

4

เป็นเวลานานแล้วที่คำถามนี้ถูกถาม แต่ถ้ายังมีคนสนใจฉันเพิ่งพบไอคอนที่คล้ายกัน ฉันกำลังรวบรวมโปรเจ็กต์ C # .net โดยใช้ VS 2008 ฉันพบว่า VS ไม่พบแอสเซมบลีสำหรับการอ้างอิงเหล่านั้น เมื่อฉันดับเบิลคลิก VS รีเฟรชข้อมูลอ้างอิงและลบไอคอนในบางส่วนของ [แก้ไข: ซึ่งสามารถค้นหาได้ในขณะนี้] สำหรับการอ้างอิงที่เหลือฉันต้องรวบรวมแอสเซมบลีที่เกี่ยวข้อง


4

การเพิ่ม 2 เซ็นต์ของฉันในคำตอบ @ kad81

ไปที่ Visual Studio -> BUILD -> Configuration Manager

ในเมนูแบบเลื่อนลง "Active Solution Platform" ที่มุมขวาบน (ของฉันคือ VS 2012) หากเป็น "แพลตฟอร์มแบบผสม" ให้เปลี่ยนเป็นแพลตฟอร์มที่เหมาะสมตามแอสเซมบลีของบุคคลที่สามอ้างอิง

จากนั้นในแต่ละโครงการในรายการตรวจสอบให้แน่ใจว่าคุณเลือกแพลตฟอร์มเดียวกันสำหรับทุกโครงการ (หากไม่มี x86 ให้เลือก "" จากนั้นคุณสามารถเลือก "x86" ได้)

สร้างโปรเจ็กต์ไลบรารีใหม่ก่อนจากนั้นอ้างอิงโปรเจ็กต์ หวังว่านี่จะช่วยได้


2

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


2

การใช้ Visual Studio 2019 กับโครงการทั้งหมดที่กำหนดเป้าหมาย. Net Core 3.1 วิธีแก้ปัญหาคือ:

  1. ทำความสะอาด / สร้าง / สร้างใหม่
  2. รีสตาร์ท Visual Studio 2019

1

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

หลังจากการวิจัยบางอย่างฉันพบลิงค์นี้ใน GitHubซึ่งอธิบายว่านี่เป็นพฤติกรรมใหม่ใน VS2015

ในหน้า GitHub จะอธิบายวิธีแก้ปัญหาสำหรับการแปลงการอ้างอิงโครงการเป็นการอ้างอิงไบนารี


1

ในการแก้ไขบางสิ่งที่ใช้งานไม่ได้มันมีเหตุผลที่จะลบบางไลบรารีบางครั้งมันจะฟังดูแปลกไปอย่างไร

อย่างไรก็ตามฉันเชื่อว่าปัญหากว้างเกินไปและอาจเกิดจากปัจจัยที่แตกต่างกันดังนั้นฉันต้องการแบ่งปันสถานการณ์ / วิธีแก้ปัญหาของฉัน

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

การอ้างอิงโครงการทั้งหมดเป็น "สีเหลือง" มันดูน่ากลัวและน่ากลัว

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

"ส่วนใหญ่" - เนื่องจากข้อความแสดงข้อผิดพลาด "สีแดงทั้งหมดรอบ ๆ " เกี่ยวกับ "องค์ประกอบไม่ได้กำหนดไว้ที่ใดก็ได้" บางครั้งก็ยังคงเกิดขึ้น นั่นเป็นเรื่องแปลกและทำให้เกิดความไม่สะดวก แต่ฉันยังสามารถรวบรวมและเรียกใช้โครงการได้: เพียงแค่ต้องทำความสะอาดโซลูชันรีสตาร์ท Visual Studio อธิษฐานสักหน่อยทำความสะอาดอีกครั้งลบโฟลเดอร์ obj / bin รีสตาร์ทอีกครั้ง ทำได้ดี.

สิ่งสำคัญคือลบการอ้างอิงไลบรารีที่ไม่มีอยู่เนื่องจากข้อความแสดงข้อผิดพลาดกล่าวถึงสิ่งอื่นอย่างแน่นอน (ตัวอย่างเช่น "Xamarin.BuildDownload.XamarinDownloadArchives ไม่พบหรือไม่พบบางสิ่ง" เป็นต้น แต่นั่นอาจหมายความว่าคุณไม่มีข้อมูลอ้างอิงบางอย่าง

จากนั้นลบโฟลเดอร์แพ็กเกจโหลดใหม่ / เปิดโปรเจ็กต์ / โซลูชันใหม่ไปที่ "จัดการแพ็คเกจ Nuget" แล้วคลิกปุ่ม "กู้คืน"


0

ฉันก็ประสบปัญหาเดียวกันเช่นกัน แต่กรณีของฉันแตกต่างจากที่กล่าวมาเล็กน้อย ฉันพยายามเปิดโครงการที่สร้างขึ้นในคอมพิวเตอร์เครื่องอื่น ฉันพบว่าเส้นทางไปยังโฟลเดอร์แพ็กเกจไม่ได้รับการอัปเดตเมื่อคุณเพิ่มข้อมูลอ้างอิงดังนั้นการรีสตาร์ท VS เปลี่ยนเวอร์ชัน. NET หรือคำแนะนำใด ๆ ที่กล่าวถึงไม่สามารถแก้ปัญหาได้ ฉันเปิดไฟล์ csproj ใน notepad ++ และแก้ไขพา ธ สัมพัทธ์ทั้งหมดไปยังโฟลเดอร์แพ็กเกจ แล้ว; คำเตือนทั้งหมดหายไป หวังว่าจะช่วยได้



0

ขอบคุณทุกท่านสำหรับความช่วยเหลือ นี่คือรายละเอียดของวิธีที่ฉันแก้ไขปัญหาของฉัน:

คลิกขวาที่โครงการของคุณ> คุณสมบัติ

ภายใต้แอปพลิเคชันเปลี่ยนกรอบเป้าหมาย ในกรณีของฉัน ImageSharp ใช้. Net 4.6.1 คุณสามารถพบสิ่งนี้ได้ใน package.config ของคุณ

ไปที่การอ้างอิงโครงการของคุณ คุณจะสังเกตเห็น SixLabors มีสามเหลี่ยมสีเหลือง คุณต้องอัปเดตแพ็คเกจ NuGet

คลิกขวาที่การอ้างอิง> จัดการแพ็คเกจ NuGet

อัปเดต SixLabors

คุณอาจมีการอัปเดตโค้ดเล็กน้อย (ดูด้านล่าง) แต่สิ่งนี้ช่วยแก้ปัญหาของฉันได้

แปลง ImageSharp.Image เป็น ImageSharp.PixelFormats.Rgba32?


0

ใน Visual Studio 2019 หนึ่งในกรอบเป้าหมายโครงการของฉันคือ. net core แต่กำลังอ้างถึงโครงการอื่นที่กรอบงานเป้าหมายเป็นมาตรฐาน. net ฉันเปลี่ยนโปรเจ็กต์ทั้งหมดให้อ้างอิงมาตรฐาน. net และไอคอนก็หายไป หากต้องการดูว่าโครงการของคุณคืออะไรให้คลิกขวาที่มันแล้วคลิกคุณสมบัติและดูที่กรอบเป้าหมาย คุณยังสามารถคลิกปกติที่โปรเจ็กต์นั้นเองและดูที่แท็ก <TargetFramework> ใต้ <PropertyGroup>


0

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


0

ฉันมีปัญหาเดียวกันในการแก้ปัญหากับโปรเจ็กต์ targting .NET Core 3.1, .NET Standard 2.0 และ. NET Framework 4.8 ปัญหาอยู่ที่เรื่องสุดท้ายนี้

เคล็ดลับที่ช่วยแก้ปัญหาให้ฉันคือการเปลี่ยนกรอบเป้าหมายเป็น. NET Framework 4.5 จากนั้นกลับไปเป็น. NET Framework 4.8

ฉันไม่รู้อย่างแน่นอนว่าทำไมสิ่งนี้จึงแก้ไขปัญหาได้ แต่ก็ทำได้

IDE คือ Visual Studio 2019


0

ฉันได้สร้าง. sln ใหม่ซึ่งใส่ไว้ในโฟลเดอร์ย่อย โฟลเดอร์. nuget หายไปจากตำแหน่งที่เพิ่มไฟล์. sln การย้ายโฟลเดอร์. nuget จากรูทไปยังโฟลเดอร์ย่อยที่ซึ่งไฟล์. sln ใหม่ของฉันได้รับการแก้ไขปัญหาให้ฉัน

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


0

จากคำตอบของ @AljohnYamaro (ขออภัยไม่สามารถแสดงความคิดเห็นในคำตอบของคุณบัญชีใหม่ที่ยังไม่มีชื่อเสียงเพียงพอ แต่เพิ่มคะแนนให้คุณ) ฉันตรวจสอบไฟล์.

ในไฟล์ของฉันนอกเหนือจากการอ้างอิงโครงการมาตรฐาน:

<ProjectReference Include="..\ProjectA\ProjectA.csproj">
    <Private>true</Private>
    <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies>
</ProjectReference>

นอกจากนี้ยังมีลิงก์โดยตรงไปยังdll ที่คอมไพล์แล้วจากโครงการที่อ้างอิง:

<ItemGroup>
    <Reference Include="ProjectA">
    <HintPath>..\ProjectA\bin\Debug\netcoreapp3.1\ProjectA.dll</HintPath>
    </Reference>
</ItemGroup>

การลบข้อมูลอ้างอิงที่สองนี้ช่วยแก้ปัญหาได้

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