ข้อผิดพลาด "ขาดสมาชิกที่ต้องการคอมไพเลอร์" ถูกส่งหลายครั้งโดยแทบไม่มีการเปลี่ยนแปลงโค้ด


95

วันนี้หลังจากปรับใช้การเปลี่ยนแปลงบางอย่างกับไซต์ C # MVC ที่ฉันเรียกใช้ฉันก็กลับไปทำการแก้ไขเพิ่มเติมและพบข้อผิดพลาดนี้:

ไม่มีสมาชิกที่ต้องการคอมไพเลอร์ System.Runtime.CompilerServices.ExtensionAttribute..ctor

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

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

แค่อยากรู้ว่ามีใครเคยเจอเรื่องนี้มาก่อน ขอบคุณล่วงหน้า!


1
ดูเหมือนว่าคุณกำลังใช้คอมไพเลอร์ C # 3.0 แต่คอมไพล์กับ. NET Framework 2.0 ตรวจสอบการอ้างอิงการประกอบของคุณ
dtb

คำตอบ:


27

ข้อผิดพลาดนี้มักหมายความว่าโครงการของคุณกำลังคอมไพล์กับ. NET 2.0 หรือคุณไม่ได้อ้างถึง System.Core.dll รุ่นที่ถูกต้อง

สำหรับคำถามที่ใกล้ซ้ำกันโปรดดูข้อผิดพลาดเมื่อใช้วิธีการขยายใน C #


ปรากฎว่าฉันมีการอ้างอิงที่ไม่ดีจากแอสเซมบลีที่ฉันไม่ได้ใช้ (Azure) อีกต่อไป ฉันไม่คิดว่าแอสเซมบลี Azure นั้นคอมไพล์กับ. Net 2.0 แต่การลบออกจะช่วยแก้ปัญหา ฉันไม่แน่ใจว่าเหตุใดสิ่งนี้จึงเกิดขึ้นแบบสุ่มเนื่องจากฉันไม่ได้สัมผัสอะไรที่เกี่ยวข้องกับแอสเซมบลีหรือเวอร์ชัน. Net (4.0) ในบางครั้ง อนิจจาขอบคุณที่ชี้ทางที่ถูกต้องให้ฉัน
jamesmillerio

Unity3D ตั้งค่าคอมไพเลอร์เป็น. NET 2 ตามค่าเริ่มต้น (ในขณะที่เขียน) ในการตั้งค่าเครื่องเล่นให้เปลี่ยนเป็นเวอร์ชัน NET ที่ใหม่กว่าเพื่อแก้ไขปัญหานี้
เงา

234

Microsoft.CSharpในกรณีของฉันมันเป็นเพราะโครงการไม่ได้อ้างอิง เมื่อฉันเพิ่มการอ้างอิงไปยังแอสเซมบลีนั้นมันก็คอมไพล์ได้ดี


3
แก้ไขปัญหา
Anton Lyhin

16
ปัญหาของฉันอยู่ในการทดสอบหน่วยโดยใช้วัตถุไดนามิกและขยาย การอ้างถึง Microsoft.CSharp เป็นเคล็ดลับ ขอบคุณ!
realPT

2
ฉันมีประเภทไดนามิก NewtonSoft และอื่น ๆ ในไลบรารีคลาส NetStandard: `` สตริง weatherjson = รอ GetAsync (url); ไดนามิก obj = JsonConvert.DeserializeObject (weatherjson); อุณหภูมิแบบไดนามิก = obj.main.temp; `` ฉันใช้ Nuget Search สำหรับ Microsoft.CSharp และติดตั้งสิ่งนั้น ตอนนี้ไลบรารีสร้างขึ้นแล้ว :) ถาม: ฉันสามารถใช้ไลบรารี. NetStandard นี้ในแอพ Linux โดยใช้การอ้างอิง Microsofct ได้หรือไม่
David Jones

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

83

ฉันไม่รู้ว่ามีใครเคยเจอปัญหานี้บ้างไหม แต่จู่ๆฉันก็พบข้อผิดพลาดนี้หลังจากเพิ่มโค้ดที่ใช้ dynamicประเภทที่และรวม WebAPI เข้ากับโปรเจ็กต์ที่มาเป็นแอปพลิเคชัน TypeScript ใน VS2013 เพียงเพิ่มข้อมูลอ้างอิงไปยัง Microsoft.CSharp ก็สามารถแก้ไขปัญหาของฉันได้

หวังว่านี่จะช่วยคนอื่นได้


3
นี่คือปัญหาของฉัน การเพิ่มแบบไดนามิกทำให้โครงการเสียหายอย่างลึกลับ
SouthShoreAK

2
เหมือนกันสำหรับฉันโดยใช้ไดนามิกกับ. NetStandard2.0 ฉันต้องติดตั้ง C # Nuget เพื่อคอมไพล์
Mahmoud Hanafy

17

ฉันเจอสถานการณ์นี้เช่นกันในวันนี้ ในกรณีของฉันฉันอ้างถึง Newton.Json.Net dll v3.5 ในแอปพลิเคชัน. NET 4.0 ของฉัน ฉันตระหนักว่าฉันไม่ได้ใช้ไลบรารีนี้ด้วยซ้ำดังนั้นเมื่อฉันลบมันออกจากการอ้างอิงของฉันมันก็ไม่ทำให้ฉันเกิดข้อผิดพลาดของคอมไพเลอร์อีกต่อไป

แก้ไขปัญหา!!!


2
เหมือนกันสำหรับฉัน Newton.Json.Net dll ทำให้เกิดปัญหา!
Julien Pierre

ในกรณีของฉันสาเหตุคือ AntiXSSLibrary.dll ของ Microsoft รุ่น NET20 ที่ไม่ถูกต้อง แทนที่ด้วย NET35 - ข้อผิดพลาดหายไป
Denis

7

ข้อผิดพลาดที่แท้จริงมาจากการที่แอสเซมบลี 2.0 ของคุณที่ทำให้เกิดข้อผิดพลาดมีรหัสนี้:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

โค้ดด้านบนอนุญาตให้แอสเซมบลี. NET 2.0 ใช้วิธีการขยาย (ดูการใช้วิธีการขยายใน. NET 2.0? ) แม้ว่าคอมไพเลอร์จะสับสนหากคุณกำหนดเป้าหมาย. NET 4.0 และอ้างอิง 2.0 Assembly (มีโค้ดด้านบน) เนื่องจาก mscorlib.dll (4.0) มีคลาสเดียวกันในเนมสเปซเดียวกัน

ฉันแก้ไขสิ่งนี้แล้ว

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

นี่เป็นปัญหาของฉันฉันจะลองทำตามคำแนะนำของคุณและโพสต์กลับ
John Peters

6

การเขียนโค้ดนี้ในโครงการของคุณอาจช่วยแก้ปัญหาของคุณได้ มันใช้ได้กับฉัน

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

คุณเขียนโค้ดนี้ที่ไหน คุณสร้างคลาสในรูทของโปรเจ็กต์หรือไม่
Alex

1
@Alex ฉันเพิ่มคลาสที่เรียกว่า CompilerService ไปยังรูทของโปรเจ็กต์ของฉันด้วยโค้ด aboce และมันใช้งานได้ ดี!
Halvard

4

NLog.dll 2.0 ที่อ้างอิงจากโครงการ. NET 4.0 อาจทำให้เกิดสิ่งนี้ได้เช่นกัน


NLog สำหรับ. NET 2.0 ที่อ้างอิงจาก. NET 3.5 ดูเหมือนจะให้ข้อผิดพลาดที่คล้ายกัน
Pedro

3

คุณอาจใช้dynamicคีย์เวิร์ดในโปรเจ็กต์ไลบรารีคลาส. NetStandard ในกรณีนี้คุณต้องเพิ่มการอ้างอิงไปยังMicrosoft.CSharpไลบรารีในโครงการ หวังว่ามันจะแก้ปัญหาของคุณได้


2

ฉันไม่มีวิธีแก้ไขที่ถูกต้อง แต่ฉันจะเพิ่มจุดข้อมูลของฉัน:

ในกรณีของฉันข้อผิดพลาดเกิดจากการอ้างถึง GoogleSearchAPINet20

นี่คือสิ่งที่เกิดขึ้น:

  • ฉันปิดโซลูชันที่สร้าง
  • ฉันเปิดโซลูชันอีกครั้ง มันยังคงสร้าง
  • ทันทีที่ฉันทำการเปลี่ยนแปลงใด ๆ และพยายามสร้างฉันได้รับข้อผิดพลาด 19 ข้อผิดพลาด "Missing compiler required member ... "
  • ฉันลบการอ้างอิงถึง GoogleSearchAPINet20
  • ฉันเพิ่มการอ้างอิงกลับไปที่ GoogleSearchAPINet20
  • ฉันสร้างโซลูชัน สร้างโดยไม่มีข้อผิดพลาด
  • ตอนนี้ฉันสามารถเปลี่ยนแปลงโค้ดสร้างหรือดำเนินการอื่น ๆ กับโซลูชันได้อย่างถูกต้องตราบเท่าที่ Visual Studio ของฉันเปิดอยู่
  • ฉันปิด Visual Studio
  • ทำซ้ำจากขั้นตอนที่หนึ่ง

ฉันไม่ได้อ้างถึง System.Core.dll ในโซลูชันของฉันเลยและกรอบเป้าหมายของฉันคือ. NET 4

จุดนี้ผมรำคาญนิดหน่อย ...


1

รับข้อผิดพลาดนี้เมื่อพยายามใช้ async Tasks กับ. NET 4.0 การอัปเดต Target Framework เป็น 4.5.2 ช่วยแก้ปัญหาได้


1

ฉันพบข้อยกเว้นชุดเดียวกันหลังจากที่ฉันเพิ่มวิธีการ async ลงในโครงการ winforms ฉันต้องการชน. NET เวอร์ชันจาก 4 เป็น 4.5


0

สำหรับฉันปัญหาเกิดขึ้นเมื่อฉันเพิ่มวิธีการอะซิงโครนัสกับงาน async รออยู่ในโครงการ. net4.0 ของฉัน!

ด้วยเวอร์ชันก่อนหน้าของ. NET-Framework 4.5 คุณต้องติดตั้งแพ็คเกจนี้:

Install-package Microsoft.Bcl.Async –pre

หรือ

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

ข้อมูลเพิ่มเติมเกี่ยวกับNugetหรือNuget

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