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


287

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 Önceden tanımlı 'Microsoft.CSharp.RuntimeBinder.Binder' türü tanımlanmadı veya içe aktarılmadı

Hata 2 Dinamik bir ifadeyi derlemek için gereken bir veya daha fazla tür bulunamıyor. Eksik Microsoft.CSharp.dll ve System.Core.dll başvuruları eksik mi?

Bu diğer okumak yazı ama C # için yeni ve gerçekten sorunun ne olduğunu anlayamadık. Özellikle bu sözde .configdosyalar ne ve nerede?


25
Referanslarınızı kontrol edin. Sağ tıklayın ve "Add Reference .." "Microsoft.CSharp.dll" yi arayın ve ekleyin. Genellikle yeni bir proje oluşturduğunuzda System.Core.dll standart olarak gelir, CSharp.dll
Internet

Yanıtlar:


586

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


26
Benimkine zaten atıfta bulunuldu, ancak hala bu hatayı aldım. VS 2010'da yeni bir ASP.Net MVC4 uygulaması oluşturmuştum. Stumped, kaldırdım ve okudum ve hata gitti. Temizlik / Yenileme yardımcı olmadı.
Paul

@Paul: Bir projeyi 4.0'dan 4.5'e yükselttikten sonra da bana oldu. Sürüm # / etc, bunun nedeni olabilecek 4.0 / 4.5 IIRC ile aynıdır.
Steven Evers

13
Visual Studio ekibi, insanların hatayı fareyle
izlemelerine izin vermeyi düşünmeli

8
@ Geoyws Tek kelime: ReSharper.
user2864740

2
@ user2864740 Normalde Resharper bunu yapar. Ancak bu durumda ReSharper hiçbir şey göstermez.
Pulle


7

Ben kaldırma ve geri referans ekleme dışında aynı sorunu vardı hatayı düzeltmedi, bu yüzden .Net sürümü için 4.5değiştirdi 4.5.1.

Bunu başarmak için web.configdosyanı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.


6

ViewBag altındaki kırmızı çizgiler 3 aydır başım ağrıyordu). Microsoft.CSharp başvurusunu projeden kaldırıp yeniden ekleyin.


3
ViewBag hattımda da kırmızı çizgiler olsa bile bu benim için çalışmadı
knocte

1

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


1

Benim için, Microsoft.CSharp'a yapılan bir başvuruyu kaldırmak ve yeniden eklemek, etkilenen dosya düzenleninceye kadar sorunu geçici olarak düzeltti. Visual Studio'nun kapatılması ve projenin yeniden açılması daha uzun vadede düzeltildi, bu nedenle bu durum Microsoft.CSharp'a zaten başvurulmuşsa oluşur.

Belki de IDE'yi ilk adım olarak yeniden başlatmak önemsiz görünüyor, ancak benim gibi bunu ilk yapılacak şey olarak düşünmeyen insanlar için bir hatırlatma.


0

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

Sınıf kütüphanelerim kesinlikle System.Core ve Microsoft.CSharp'a atıfta bulundu. Web Uygulaması 4.0 idi ve destek sorunları nedeniyle 4.5'e yükseltilemedi.

Razor Engine kullanarak bir jilet şablonu derleme hatasıyla karşılaşıyordum ve web uygulaması yeniden başlatıldıktan sonra olduğu gibi sadece aralıklı olarak karşılaşıyordum.

Benim için çalışan çözüm, montajı manuel olarak yükledikten sonra aynı işlemi tekrar deniyordu ...

        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 başka birine yardımcı olabilir.


-2

Eğer kaçırırsanız, Microsoft.CSharp.dll bu hata oluşabilir. Proje referanslarınızı kontrol edin.


3
Stack Overflow'a hoş geldiniz! Bir kod örneği veya daha fazla açıklama eklemek isteyebilirsiniz. Bu daha çok bir yorum gibi görünüyor,
Gary Storey

5
Temelde 3 yıl önce verilen cevapta aynı şeyi söylediniz.
Ilya Luzyanin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.