Ein oder mehrere Typen, die zum Kompilieren eines dynamischen Ausdrucks erforderlich sind, können nicht gefunden werden. Fehlen Ihnen Verweise auf Microsoft.CSharp.dll und System.Core.dll?

287

Ich versuche, diesen Code in Microsoft Visual C # 2010 zu kompilieren

using System;
using System.Globalization;


class main
{
    static void Main()
    {

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

aber ich bekomme diese beiden Fehler

Fehler 1 Der vordefinierte Typ 'Microsoft.CSharp.RuntimeBinder.Binder' ist nicht definiert oder importiert

Fehler 2 Ein oder mehrere Typen, die zum Kompilieren eines dynamischen Ausdrucks erforderlich sind, können nicht gefunden werden. Fehlen Ihnen Verweise auf Microsoft.CSharp.dll und System.Core.dll?

Ich habe diesen anderen Beitrag gelesen , bin aber neu in C # und konnte nicht verstehen, was wirklich das Problem ist. Besonders was und wo sind diese sogenannten .configDateien ..

user1232138
quelle
25
Überprüfen Sie Ihre Referenzen. Klicken Sie mit der rechten Maustaste und wählen Sie "Referenz hinzufügen". Suchen Sie nach "Microsoft.CSharp.dll" und fügen Sie es hinzu. Normalerweise ist System.Core.dll Standard, wenn Sie ein neues Projekt erstellen, nicht so sicher über CSharp.dll
The Internet

Antworten:

586

Klicken Sie in Ihrem Solution Explorer-Fenster mit der rechten Maustaste auf Verweise, wählen Sie Verweis hinzufügen, wechseln Sie zur Registerkarte .NET, suchen Sie Microsoft.CSharp und fügen Sie es hinzu.

M. Mennan Kara
quelle
26
Meins wurde bereits referenziert, aber ich hatte immer noch diesen Fehler. Ich hatte in VS 2010 eine neue ASP.Net MVC4-Anwendung erstellt. Stumped entfernte ich sie und las sie erneut, und der Fehler verschwand. Reinigung / Wiederaufbau hat nicht geholfen.
Paul
@Paul: Das gleiche ist mir passiert, nachdem ich ein Projekt von 4.0 auf 4.5 aktualisiert habe. Die Version # / etc ist die gleiche zwischen 4.0 / 4.5 IIRC, was der Grund sein könnte.
Steven Evers
13
Das Visual Studio-Team sollte wirklich darüber nachdenken, die
Benutzer
8
@Geoyws Ein Wort: ReSharper.
user2864740
2
@ user2864740 Normalerweise macht Resharper dies. In diesem Fall zeigt ReSharper jedoch nichts an.
Pulle
21

Stellen Sie sicher, dass Ihr Projekt auf .NET Framework 4.0 ausgerichtet ist. Visual Studio 2010 unterstützt auch das .NET 3.5-Framework-Ziel, .NET 3.5 unterstützt das dynamicSchlüsselwort jedoch nicht .

Sie können die Framework-Version in den Projekteigenschaften anpassen. Weitere Informationen finden Sie unter http://msdn.microsoft.com/en-us/library/bb398202.aspx .

Chris Shain
quelle
7

Ich hatte das gleiche Problem, außer dass das Entfernen und Hinzufügen der Referenz den Fehler nicht behoben hat. Daher habe ich die .Net-Version von 4.5auf geändert 4.5.1.

Um dies zu erreichen, gehen Sie zu Ihrer web.configDatei und ändern Sie die folgenden Zeilen

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

dazu

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

und wieder aufbauen.

dynamiclynk
quelle
6

Rote Linien unter dem ViewBag waren 3 Monate lang meine Kopfschmerzen. Entfernen Sie einfach die Microsoft.CSharp-Referenz aus dem Projekt und fügen Sie sie erneut hinzu.

römisch
quelle
3
Dies funktionierte nicht für mich, auch wenn ich auch rote Linien in meiner ViewBag-Linie habe
knocte
1

Ich hatte das gleiche Problem und löste es, indem ich die Referenz "Microsoft.CSharp" aus dem Projekt entfernte und sie dann erneut hinzufügte.

Chan
quelle
1

Durch Entfernen und erneutes Hinzufügen eines Verweises auf Microsoft.CSharp wurde das Problem vorübergehend behoben, bis die betroffene Datei bearbeitet wurde. Durch das Schließen von Visual Studio und das erneute Öffnen des Projekts wurde das Problem langfristig behoben. Dies ist eine Option, wenn diese Situation auftritt, während auf Microsoft.CSharp bereits verwiesen wird.

Vielleicht scheint es trivial, die IDE als ersten Schritt neu zu starten, aber hier ist eine Erinnerung für Leute wie mich, die das nicht als erstes betrachten.

Mellow
quelle
0

Nichts davon hat bei mir funktioniert.

Meine Klassenbibliotheken bezogen sich definitiv alle auf System.Core und Microsoft.CSharp. Die Webanwendung war 4.0 und konnte aufgrund von Supportproblemen nicht auf 4.5 aktualisiert werden.

Beim Kompilieren einer Rasiervorlage mit der Razor Engine ist ein Fehler aufgetreten, der nur zeitweise aufgetreten ist, beispielsweise nach dem Neustart der Webanwendung.

Die Lösung, die für mich funktioniert hat, bestand darin, die Baugruppe manuell zu laden und dann denselben Vorgang erneut zu versuchen ...

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

Hoffentlich hilft das jemand anderem da draußen.

Mick
quelle
-2

Wenn Sie Microsoft.CSharp.dll verpassen, kann dieser Fehler auftreten. Überprüfen Sie Ihre Projektreferenzen.

Ramkumar Thangavel
quelle
3
Willkommen bei Stack Overflow! Möglicherweise möchten Sie ein Codebeispiel oder eine Erklärung hinzufügen. Dies scheint eher ein Kommentar zu sein,
Gary Storey
5
Sie haben im Grunde das Gleiche gesagt wie in der vor 3 Jahren angenommenen Antwort.
Ilya Luzyanin