web-gelistirme-sc.com

Dinamik bir ifadeyi derlemek için gereken bir veya daha fazla tür bulunamıyor. Microsoft.CSharp.dll ve System.Core.dll referanslarını eksik mi?

Bu kodu Microsoft Visual C # 2010'da derlemeye çalışıyorum

using System;
using System.Globalization;


class main
{
    static void Main()
    {

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

ama bu iki hatayı alıyorum

Hata 1 Öntanımlı tip 'Microsoft.CSharp.RuntimeBinder.Binder' tanımlanmamış veya alınmamış

Hata 2 Dinamik bir ifadeyi derlemek için gereken bir veya daha fazla tür bulunamıyor. Microsoft.CSharp.dll ve System.Core.dll dosyalarına atıflar eksik mi?

Bunu okudum post ama C # konusunda yeniyim ve sorunun gerçekten ne olduğunu anlayamadım. Özellikle bunlar neyin neresi ve _ .config dosya ...

282
user1232138

Çözüm Gezgini pencerenizde Referanslar'a sağ tıklayın, Referans Ekle'yi seçin, .NET sekmesine gidin, Microsoft.CSharp'ı bulun ve ekleyin.

581
M. Mennan Kara

Projenizin .NET Framework 4.0'ı hedeflediğinden emin olun. Visual Studio 2010, .NET 3.5 çerçeve hedefini de destekliyor, ancak .NET 3.5, dynamic anahtar sözcüğünü desteklemiyor.

Çerçeve versiyonunu proje özelliklerinden ayarlayabilirsiniz. Daha fazla bilgi için http://msdn.Microsoft.com/en-us/library/bb398202.aspx adresini ziyaret edin.

21
Chris Shain

Referansı kaldırıp geri eklemek dışında aynı sorunu yaptım hatayı düzeltmedim, bu yüzden .Net versiyonunu 4.5 - 4.5.1 olarak değiştirdim.

Bunu başarmak için web.config dosyanıza gidin ve aşağıdaki satırları değiştirin

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

buna

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

ve yeniden inşa et.

7
C0r3yh

ViewBag altındaki kırmızı çizgiler 3 aydır başım ağrıyordu. Sadece Microsoft.CSharp referansını projeden kaldırın ve sonra tekrar ekleyin.

6
Roman

Aynı sorunu yaşadım ve projeden "Microsoft.CSharp" referansını kaldırarak çözdüm ve tekrar ekledim.

1
chan

Benim için, Microsoft.CSharp'a bir başvurunun kaldırılması ve yeniden eklenmesi, etkilenen dosya düzenlenene kadar sorunu geçici olarak düzeltti. Visual Studio'yu kapatmak ve projeyi yeniden açmak daha uzun vadede düzeldi, bu nedenle bu durum Microsoft.CSharp'a zaten başvurulurken ortaya çıkarsa bir seçenek.

Belki IDE i ilk adım olarak yeniden başlatmak önemsiz görünüyor, ama işte benim gibi yapacak ilk şey olduğunu düşünmeyen insanlar için bir hatırlatma.

1
Mellow

Bunların hiçbiri benim için çalıştı.

Sınıf kütüphanelerim kesinlikle hem System.Core hem de Microsoft.CSharp’a gönderme yapıyorlardı. Web Uygulaması 4.0 idi ve destek sorunları nedeniyle 4.5'e yükseltemedi.

Razor Engine komutunu kullanarak bir jilet şablonu derlerken hatayla karşılaştım ve web uygulaması yeniden başlatıldıktan sonra olduğu gibi, yalnızca zaman zaman karşılaştırarak karşılaştım.

Benim için çalışan çözüm, Meclisi manuel olarak yüklemek ve aynı işlemi yeniden denemek oldu ...

        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;
            }
        }

Umarım bu orada başka birine yardımcı olabilir.

0
Mick