गतिशील अभिव्यक्ति को संकलित करने के लिए आवश्यक एक या अधिक प्रकार नहीं मिल सकते हैं। क्या आप Microsoft.CSharp.dll और System.Core.dll के संदर्भ याद कर रहे हैं?


287

मैं Microsoft Visual C # 2010 में इस कोड को संकलित करने का प्रयास कर रहा हूं

using System;
using System.Globalization;


class main
{
    static void Main()
    {

        dynamic d;
        d = "dyna";
        Console.WriteLine(d);    
    }
}

लेकिन मुझे ये दो त्रुटियाँ मिल रही हैं

त्रुटि 1 पूर्वनिर्धारित प्रकार 'Microsoft.CSharp.RuntimeBinder.Binder' परिभाषित या आयातित नहीं है

त्रुटि 2 गतिशील अभिव्यक्ति संकलित करने के लिए आवश्यक एक या अधिक प्रकार नहीं मिल सकते हैं। क्या आप Microsoft.CSharp.dll और System.Core.dll के संदर्भ याद कर रहे हैं?

मैंने इस दूसरी पोस्ट को पढ़ा लेकिन मैं C # में नया हूं और मैं समझ नहीं पाया कि वास्तव में समस्या क्या है। विशेष रूप से क्या और कहाँ ये तथाकथित .configफाइलें हैं ..


25
अपने संदर्भ देखें। राइट क्लिक करें और "संदर्भ जोड़ें .." "Microsoft.CSharp.dll" के लिए खोजें और इसे जोड़ें। आमतौर पर System.Core.dll एक नया प्रोजेक्ट बनाते समय मानक आता है, CSharp.dll के बारे में इतना निश्चित नहीं है
इंटरनेट

जवाबों:


586

आपकी समाधान खोजकर्ता विंडो पर, संदर्भ के लिए राइट क्लिक करें, संदर्भ जोड़ें चुनें, .NET टैब पर जाएं, Microsoft.CSharp ढूंढें और जोड़ें।


26
मेरा पहले से ही संदर्भित था फिर भी मुझे यह त्रुटि आई। मैंने VS 2010 में एक नया ASP.Net MVC4 एप्लिकेशन बनाया था। स्टम्प्ड, मैंने इसे हटा दिया और इसे पढ़ा और त्रुटि दूर हो गई। सफाई / पुनर्निर्माण में मदद नहीं मिली।
पॉल

@Paul: 4.0 से 4.5 तक के प्रोजेक्ट को अपग्रेड करने के बाद मेरे साथ भी ऐसा ही हुआ। संस्करण # / आदि 4.0 / 4.5 IIRC के बीच समान है जो इसका कारण हो सकता है।
स्टीवन एवर्स

13
विजुअल स्टूडियो टीम को वास्तव में लोगों को त्रुटि पर माउस देने के बारे में सोचना चाहिए और फिर "Microsoft.CSharp को संदर्भ में जोड़ें" का चयन करें
जॉयोक्स 12'14

8
@Geoyws एक शब्द: ReSharper।
user2864740

2
@ user2864740 आम तौर पर रिचार्पर ऐसा करता है। लेकिन इस मामले में, ReSharper कुछ भी नहीं दिखाएगा।
पल्स

21

सुनिश्चित करें कि आपकी परियोजना .NET फ्रेमवर्क 4.0 को लक्षित कर रही है। Visual Studio 2010 .NET 3.5 फ्रेमवर्क लक्ष्य का भी समर्थन करता है, लेकिन .NET 3.5 dynamicकीवर्ड का समर्थन नहीं करता है ।

आप प्रोजेक्ट गुणों में फ्रेमवर्क संस्करण को समायोजित कर सकते हैं। अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/bb398202.aspx देखें ।


7

मैं दूर करने और संदर्भ वापस, त्रुटि को ठीक नहीं किया तो मैं से नेट संस्करण बदल जोड़ने को छोड़कर एक ही मुद्दा था 4.5करने के लिए 4.5.1

इसे प्राप्त करने के लिए अपनी web.configफ़ाइल पर जाएँ और निम्न पंक्तियों को बदलें

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />

इसके लिए

<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />

और पुनर्निर्माण।


6

ViewBag के तहत लाल रेखाएं 3 महीने के लिए मेरा सिरदर्द थीं)। बस Microsoft.CSharp संदर्भ को प्रोजेक्ट से निकालें और फिर उसे फिर से जोड़ें।


3
यह मेरे लिए तब भी काम नहीं आया जब मेरे पास भी मेरी ViewBag लाइन में लाल लाइनें हैं
knocte

1

मेरे पास एक ही समस्या थी और परियोजना से "Microsoft.CSharp" संदर्भ को हटाकर इसे हल किया और फिर इसे फिर से जोड़ा।


1

मेरे लिए, Microsoft.CSharp के संदर्भ को हटाने और फिर से जोड़ने से समस्या को अस्थायी रूप से तब तक ठीक किया गया जब तक प्रभावित फ़ाइल को संपादित नहीं किया गया। Visual Studio को बंद करना और प्रोजेक्ट को फिर से खोलना इसे अधिक लंबी अवधि के लिए तय करता है, इसलिए यह एक विकल्प है यदि यह स्थिति तब होती है जब Microsoft.CSharp पहले से संदर्भित है।

हो सकता है कि IDE को पहले चरण के रूप में फिर से शुरू करना तुच्छ लगता है, लेकिन यहां मेरे जैसे लोगों के लिए एक अनुस्मारक है जो ऐसा करने के लिए पहली बात के रूप में नहीं सोचते हैं।


0

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

मेरी कक्षा की लाइब्रेरी निश्चित रूप से System.Core और Microsoft.CSharp दोनों को संदर्भित कर रही थी। वेब अनुप्रयोग 4.0 था और समर्थन मुद्दों के कारण 4.5 में अपग्रेड नहीं हो सका।

मैं रेजर इंजन का उपयोग करके रेजर टेम्पलेट को संकलित करने में त्रुटि का सामना कर रहा था , और केवल इसे आंतरायिक रूप से सामना कर रहा था, जैसे कि वेब एप्लिकेशन को पुनरारंभ करने के बाद।

मेरे लिए जो समाधान काम करता था वह मैन्युअल रूप से असेंबली लोड कर रहा था फिर उसी ऑपरेशन को रीमैट करके ...

        bool retry = true;
        while (retry)
        {
            try
            {
                string textTemplate = File.ReadAllText(templatePath);
                Razor.CompileWithAnonymous(textTemplate, templateFileName);
                retry = false;
            }
            catch (TemplateCompilationException ex)
            {
                LogTemplateException(templatePath, ex);
                retry = false;

                if (ex.Errors.Any(e  => e.ErrorNumber == "CS1969"))
                {
                    try
                    {
                        _logger.InfoFormat("Attempting to manually load the Microsoft.CSharp.RuntimeBinder.Binder");
                        Assembly csharp = Assembly.Load("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a");
                        Type type = csharp.GetType("Microsoft.CSharp.RuntimeBinder.Binder");
                        retry = true;
                    }
                    catch(Exception exLoad)
                    {
                        _logger.Error("Failed to manually load runtime binder", exLoad);
                    }
                }

                if (!retry)
                    throw;
            }
        }

उम्मीद है कि इससे किसी और की मदद हो सकती है।


-2

यदि आप चूक जाते हैं, तो Microsoft.CSharp.dll यह त्रुटि हो सकती है। आप प्रोजेक्ट संदर्भ देखें।


3
ढेर अतिप्रवाह में आपका स्वागत है! आप एक कोड नमूना या एक स्पष्टीकरण के अधिक शामिल करना चाह सकते हैं। यह एक टिप्पणी की तरह अधिक लगता है,
गैरी मंजिला

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