c# - गतिशील अभिव्यक्ति को संकलित करने के लिए आवश्यक एक या अधिक प्रकार नहीं मिल सकते हैं। क्या आप माइक्रोसॉफ्ट.CSharp.dll और System.Core.dll के संदर्भ खो रहे हैं?




.net (6)

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

मैं इस कोड को माइक्रोसॉफ्ट विजुअल सी # 2010 में संकलित करने की कोशिश कर रहा हूं

using System;
using System.Globalization;


class main
{
    static void Main()
    {

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

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

त्रुटि 1 पूर्वनिर्धारित प्रकार 'माइक्रोसॉफ्ट.CSharp.RuntimeBinder.Binder' परिभाषित या आयात नहीं किया गया है

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

मैंने यह अन्य post पढ़ा लेकिन मैं सी # के लिए नया हूं और मुझे समझ में नहीं आया कि वास्तव में समस्या क्या है। विशेष रूप से ये कहां और कहां हैं .config फाइलें कहां हैं ..


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

मेरी कक्षा पुस्तकालय निश्चित रूप से सिस्टम दोनों को संदर्भित कर रहे थे। कोर और माइक्रोसॉफ्ट .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;
            }
        }

उम्मीद है कि यह किसी और की मदद कर सकता है।


मेरे पास संदर्भ को हटाने और जोड़ने के अलावा एक ही समस्या थी, त्रुटि को ठीक नहीं किया गया, इसलिए मैंने .NET संस्करण 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" />

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


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

हो सकता है कि आईडीई को पहले चरण के रूप में पुनरारंभ करना तुच्छ लगता है, लेकिन यहां मेरे जैसे लोगों के लिए एक अनुस्मारक है जो ऐसा करने की पहली चीज़ के बारे में नहीं सोचते हैं।


व्यूबैग के नीचे लाल रेखाएं 3 महीने के लिए मेरा सिरदर्द था)। बस प्रोजेक्ट से Microsoft.CSharp संदर्भ को हटा दें और फिर इसे दोबारा जोड़ें।


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

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





.net