"गुम कंपाइलर आवश्यक सदस्य" त्रुटि कोड में लगभग कोई बदलाव नहीं होने के साथ कई बार फेंकी गई


94

आज मैं अपने द्वारा चलाए जाने वाले C # MVC साइट में कुछ परिवर्तन लागू करने के बाद, मैं कुछ और संशोधन करने के लिए वापस गया और इस त्रुटि के पार आया:

लापता कंपाइलर के लिए आवश्यक सदस्य System.Runtime.CompilerServices.ExtensionAttribute..ctor

त्रुटि थोड़ी अस्पष्ट है (इसके अलावा अन्य विवरण, स्पष्ट रूप से) क्योंकि यह मुझे एक फ़ाइल, लाइन, या कॉलम नहीं देता है केवल संदर्भ के लिए, परियोजना। साथ ही, यह त्रुटि को कुल 20 बार फेंकता है। मैंने केवल उस समय के बीच कोड में तीन परिवर्तन किए हैं जो मैंने तैनात किए थे (यह उस समय पूरी तरह से कार्यात्मक था) और अब। मैंने अपने परिवर्तनों को वापस ले लिया और यह अभी भी वही त्रुटि फेंक रहा है जिससे मुझे कोई मतलब नहीं है।

मुझे SO या Google पर इस त्रुटि के बारे में बहुत जानकारी नहीं मिली है, इस समाधान के अलावा और कुछ मोनो परियोजना त्रुटियों के लिए कुछ संदर्भ (मैं मोनो का उपयोग नहीं कर रहा हूं)। ऊपर दिए गए समाधान को एक वर्ग परिभाषा जोड़ने की आवश्यकता है जो संकलक को संदर्भ को हल करने की अनुमति देगा। मैं विशेष रूप से ऐसा नहीं करना चाहता क्योंकि मुझे इस बिंदु तक इसे करने की आवश्यकता नहीं है और यह सिर्फ मेरे कोड को मैला कर देगा।

बस अगर किसी ने पहले इस पार चला गया है उत्सुक। अग्रिम में धन्यवाद!


1
ऐसा लगता है कि आप C # 3.0 कंपाइलर का उपयोग कर रहे हैं, लेकिन .NET फ्रेमवर्क 2.0 के विरुद्ध संकलन कर रहे हैं। अपने विधानसभा संदर्भ देखें।
dtb

जवाबों:


27

इस त्रुटि का आमतौर पर मतलब है कि या तो आपकी परियोजना .NET 2.0 के खिलाफ संकलन कर रही है या आप System.Core.dll के सही संस्करण का संदर्भ नहीं दे रहे हैं

निकट डुप्लिकेट प्रश्न के लिए, C # में एक्सटेंशन विधियों का उपयोग करते समय त्रुटि देखें


यह वास्तव में निकला कि मेरे पास एक असेंबली से खराब संदर्भ था जिसका मैं अब उपयोग नहीं कर रहा था (एज़्योर)। मुझे नहीं लगता कि एज़्योर असेंबली .Net 2.0 के खिलाफ संकलित की गई थी, लेकिन इसे हटाकर इस मुद्दे को ठीक कर दिया गया। मुझे यकीन नहीं है कि यह यादृच्छिक रूप से अस्तित्व में आया क्योंकि मैंने कुछ समय में अपनी विधानसभाओं या .Net संस्करण (4.0) से संबंधित कुछ भी नहीं छुआ है। काश, मुझे सही दिशा में इशारा करने के लिए धन्यवाद।
jamesmillerio

Unity3D संकलक को .NET 2 में डिफ़ॉल्ट रूप से (लिखने के समय) सेट करता है। प्लेयर सेटिंग्स में, इस समस्या को ठीक करने के लिए इसे नए .NET वर्जन में बदलें।
छाया

230

मेरे मामले में यह था क्योंकि परियोजना संदर्भित नहीं थी Microsoft.CSharp। एक बार जब मैंने उस असेंबली का संदर्भ जोड़ा, तो यह ठीक-ठीक संकलित हुई।


3
समस्या का हल किया।
एंटोन लिहिन

16
मेरी समस्या डायनेमिक और एक्सपेंडेओ ऑब्जेक्ट का उपयोग करके एक यूनिट टेस्ट में थी। Microsoft.CSharp को संदर्भित करना चाल थी। धन्यवाद!
realPT

1
मेरे पास डायनेमिक प्रकार न्यूटनॉफ्ट आदि थे। नेटस्टैंडर्ड क्लास लाइब्रेरी: `` स्ट्रिंग वेदरसन = गेटएस्पिन (यूआरएल) की प्रतीक्षा करें; गतिशील obj = JsonConvert.DeserializeObject (अपक्षय); गतिशील अस्थायी = obj.main.temp; `` `मैंने Microsoft.CSharp के लिए Nuget खोज की और इसे स्थापित किया। लाइब्रेरी अब बनाता है :) Q. क्या मैं इस .NetStandard लाइब्रेरी का उपयोग लिनक्स ऐप में कर सकता हूं, जिसे माइक्रोसॉफ़्ट संदर्भ दिया गया है?
डेविड जोन्स

धन्यवाद! किसी कारण से यह मेरे लिए संदेश से स्पष्ट नहीं था! मैं बहुत पहले लिखी एक परियोजना को ट्विक कर रहा हूं और यह संदर्भ सामग्री भयावह है। एक जावा की सापेक्ष स्पष्टता की सराहना करता है जिसे मैं सामान्य रूप से उपयोग करता हूं।
Tuntable

82

मुझे नहीं पता कि किसी और को यह अनुभव हुआ है, लेकिन मैं अचानक इस त्रुटि में कुछ कोड के dynamicप्रकारों को जोड़ने और वीएसएपी 3 में टाइपस्क्रिप्ट एप्लिकेशन के रूप में उत्पन्न होने वाले प्रोजेक्ट में वेबएपीआई को शामिल करने के बाद बारिश करता हूं। बस Microsoft.CSharp के संदर्भ को जोड़ने से मेरी समस्या हल हो गई।

मनाइए कि यह किसी और के लिए सहायक हो।


3
यह वास्तव में मेरी समस्या थी। गतिशील रूप से जोड़ने से परियोजना टूट गई।
साउथशोरक

2
मेरे लिए वही, .NetStandard2.0 के साथ डायनामिक का उपयोग करके, मुझे इसके संकलन के लिए C # Nuget स्थापित करना पड़ा
Mahmoud Hanafy

17

मैं आज भी इस स्थिति में भाग गया। मेरे मामले में मैं अपने .NET 4.0 एप्लिकेशन में न्यूटन.जॉन.नेट dll v3.5 का उल्लेख कर रहा था। मुझे एहसास हुआ कि मैं इस पुस्तकालय का उपयोग नहीं कर रहा था, इस प्रकार एक बार जब मैंने इसे अपने संदर्भों से हटा दिया, तो इसने मुझे संकलक त्रुटि नहीं दी।

समस्या सुलझ गयी!!!


2
मेरे लिए समान, न्यूटन.जॉन.नेट डीएल समस्या का कारण बना!
जूलियन पियरे

मेरे मामले में कारण Microsoft के AntiXSSLibrary.dll का गलत NET20 संस्करण था। NET35 के साथ प्रतिस्थापित - त्रुटि चली गई है।
डेनिस

7

वास्तविक त्रुटि इस तथ्य से आती है कि त्रुटि का कारण बनने वाली आपकी 2.0 विधानसभा में यह कोड है:

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

उपरोक्त कोड .NET 2.0 असेंबली को एक्सटेंशन विधियों का उपयोग करने की अनुमति देता है ( .NET 2.0 में एक्सटेंशन विधियों का उपयोग करके देखें ? )। यदि यह संकलक को भ्रमित करता है यदि आप .NET 4.0 को लक्षित करते हैं और एक 2.0 असेंबली (कोड से ऊपर) का संदर्भ देते हैं क्योंकि mscorlib.dll (4.0) में समान नामस्थान में एक ही वर्ग होता है।

मैंने यह तय किया

  • मूल 2.0 असेंबली को फिर से विशेषता 4.0 को लक्षित करके संकलित करके
  • विधानसभा को हटाकर (जाहिर है)
  • आपके द्वारा संकलित किए गए लक्ष्य में एक तीसरा एक्सटेंशन विशेषता जोड़कर (यह संदर्भित परिभाषाओं को पूरा करना प्रतीत होता है)

यह वास्तव में मेरा मुद्दा है, मैं आपके निर्देशों और पोस्ट को वापस लेने की कोशिश करूँगा।
जॉन पीटर्स

6

इस कोड को अपनी परियोजना में कहीं लिखने से आपकी समस्या हल हो सकती है। इससे मेरा काम बनता है

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

आपने यह कोड कहाँ लिखा है? आप परियोजना की जड़ में एक वर्ग बनाया?
एलेक्स

1
@ एलेक्स मैंने अपने प्रोजेक्ट के रूट में CompilerService नामक एक क्लास को कोड के साथ जोड़ा और यह काम किया। अच्छा!
हलवार्ड

4

.NET 4.0 प्रोजेक्ट से संदर्भित NLog.dll 2.0 भी इसका कारण बन सकता है।


.NET 2.0 के लिए NLog, एक .NET 3.5 से संदर्भित समान त्रुटि देने के लिए लगता है।
पेड्रो

3

शायद आप dynamicकीवर्ड का उपयोग करते हैं । नेटस्टैंडर्ड क्लास लाइब्रेरी प्रोजेक्ट। यदि हां, तो आपको Microsoft.CSharpप्रोजेक्ट में लाइब्रेरी का संदर्भ जोड़ना होगा । आशा है कि यह आपकी समस्या का समाधान करेगा।


2

मेरे पास एक सही समाधान नहीं है, लेकिन मैं अपना डेटा बिंदु जोड़ूंगा:

मेरे मामले में त्रुटि GoogleSearchAPINet20 को संदर्भित करने के कारण होती है

यहाँ होता है:

  • मैं उस समाधान को बंद करता हूं जो बनाता है
  • मैं फिर से समाधान खोलता हूं। यह अभी भी बनाता है
  • जैसे ही मैं कोई बदलाव करता हूं और बनाने की कोशिश करता हूं, मुझे 19 "मिसिंग कंपाइलर आवश्यक सदस्य ..." त्रुटियां मिलती हैं
  • मैं GoogleSearchAPINet20 के संदर्भ को हटाता हूं
  • मैं GoogleSearchAPINet20 के संदर्भ को वापस जोड़ता हूं
  • मैं हल बनाता हूं। यह त्रुटियों के बिना बनाता है
  • जब तक मेरा विज़ुअल स्टूडियो खुला है मैं समाधान के साथ कोड परिवर्तन, निर्माण या किसी अन्य क्रिया को सही ढंग से कर सकता हूं
  • मैं विजुअल स्टूडियो बंद करता हूं
  • चरण एक से दोहराएँ

मैं अपने समाधान में System.Core.dll का संदर्भ नहीं दे रहा हूं और मेरा लक्ष्य ढाँचा .NET 4 है।

मैं इस बिंदु पर थोड़ा परेशान हूं ...


1

.NET 4.0 के विरुद्ध Async कार्य का उपयोग करने का प्रयास करते समय यह त्रुटि मिली। लक्ष्य ढाँचे को 4.5.2 में अद्यतन करने से समस्या ठीक हो गई।


1

मैं एक winforms परियोजना में कुछ async विधियों को जोड़ने के बाद अपवादों के एक ही सेट को हिट करता हूं। मुझे अपने .NET संस्करण को 4 से 4.5 तक टक्कर देने की आवश्यकता थी


0

मेरे लिए, समस्या तब उत्पन्न होती है जब मैं अपने .net4.0 परियोजना में async टास्क के साथ अतुल्यकालिक विधि जोड़ देता हूँ!

.NET- फ्रेमवर्क 4.5 के पिछले संस्करणों के साथ, आपको यह पैकेज स्थापित करना होगा:

Install-package Microsoft.Bcl.Async pre

या

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

Nuget या Nuget पर अधिक जानकारी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.