Un ou plusieurs types requis pour compiler une expression dynamique sont introuvables. Vous manquez des références à Microsoft.CSharp.dll et System.Core.dll?

287

J'essaie de compiler ce code dans Microsoft Visual C # 2010

using System;
using System.Globalization;


class main
{
    static void Main()
    {

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

mais je reçois ces deux erreurs

Erreur 1 Le type prédéfini «Microsoft.CSharp.RuntimeBinder.Binder» n'est pas défini ou importé

Erreur 2 Un ou plusieurs types requis pour compiler une expression dynamique sont introuvables. Vous manquez des références à Microsoft.CSharp.dll et System.Core.dll?

J'ai lu cet autre article mais je suis nouveau sur C # et je ne pouvais pas comprendre quel était vraiment le problème. Surtout quoi et où sont ces soi-disant .configfichiers ..

user1232138
la source
25
Vérifiez vos références. Faites un clic droit et "Ajouter une référence .." Recherchez "Microsoft.CSharp.dll" et ajoutez-le. Habituellement, System.Core.dll est fourni en standard lorsque vous créez un nouveau projet, pas si sûr de CSharp.dll
Internet

Réponses:

586

Dans la fenêtre de votre explorateur de solutions, cliquez avec le bouton droit sur Références, sélectionnez Ajouter une référence, accédez à l'onglet .NET, recherchez et ajoutez Microsoft.CSharp.

M. Mennan Kara
la source
26
Le mien était déjà référencé mais j'avais toujours cette erreur. J'avais créé une nouvelle application ASP.Net MVC4 dans VS 2010. Stumped, je l'ai supprimé et lu à nouveau, et l'erreur a disparu. Le nettoyage / la reconstruction n'a pas aidé.
Paul
@Paul: La même chose m'est arrivée après la mise à niveau d'un projet de 4.0 à 4.5. La version # / etc est la même entre 4.0 / 4.5 IIRC ce qui pourrait être la raison.
Steven Evers
13
L'équipe de Visual Studio devrait vraiment penser à laisser les gens
passer la
8
@Geoyws Un mot: ReSharper.
user2864740
2
@ user2864740 Normalement, Resharper fait cela. Mais dans ce cas, ReSharper ne montrera rien.
Pulle
21

Assurez-vous que votre projet cible le .NET Framework 4.0. Visual Studio 2010 prend également en charge la cible de framework .NET 3.5, mais .NET 3.5 ne prend pas en charge le dynamicmot clé.

Vous pouvez ajuster la version du framework dans les propriétés du projet. Voir http://msdn.microsoft.com/en-us/library/bb398202.aspx pour plus d'informations.

Chris Shain
la source
7

J'ai eu le même problème, sauf que la suppression et l'ajout de la référence n'ont pas résolu l'erreur, j'ai donc changé la version .Net de 4.5à 4.5.1.

Pour ce faire, accédez à votre web.configfichier et modifiez les lignes suivantes

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

pour ça

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

et reconstruire.

dynamiclynk
la source
6

Les lignes rouges sous le ViewBag m'ont fait mal à la tête pendant 3 mois). Supprimez simplement la référence Microsoft.CSharp du projet, puis ajoutez-la à nouveau.

romain
la source
3
cela n'a pas fonctionné pour moi même lorsque j'ai également des lignes rouges dans ma ligne
ViewBag
1

J'ai eu le même problème et l'ai résolu en supprimant la référence "Microsoft.CSharp" du projet, puis en l'ajoutant à nouveau.

chan
la source
1

Pour moi, la suppression et l'ajout d'une référence à Microsoft.CSharp ont résolu le problème temporairement jusqu'à ce que le fichier affecté soit modifié. La fermeture de Visual Studio et la réouverture du projet l'ont corrigé à plus long terme, c'est donc une option si cette situation se produit alors que Microsoft.CSharp est déjà référencé.

Peut-être que le redémarrage de l'IDE comme première étape semble trivial, mais voici un rappel pour les gens comme moi qui ne pensent pas que c'est la première chose à faire.

Moelleux
la source
0

Rien de tout cela n'a fonctionné pour moi.

Mes bibliothèques de classes faisaient toutes référence à System.Core et Microsoft.CSharp. L'application Web était 4.0 et n'a pas pu être mise à niveau vers 4.5 en raison de problèmes de support.

Je rencontrais l'erreur lors de la compilation d'un modèle de rasoir à l'aide du moteur Razor , et je ne le rencontrais que par intermittence, comme après le redémarrage de l'application Web.

La solution qui a fonctionné pour moi a été de charger manuellement l'assemblage puis de recommencer la même opération ...

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

J'espère que cela pourrait aider quelqu'un d'autre.

Mick
la source
-2

Si vous manquez, Microsoft.CSharp.dll cette erreur peut se produire. Vérifiez vos références de projet.

Ramkumar Thangavel
la source
3
Bienvenue dans Stack Overflow! Vous souhaiterez peut-être inclure un exemple de code ou plusieurs explications. Cela ressemble plus à un commentaire,
Gary Storey
5
Vous avez essentiellement dit la même chose que dans la réponse acceptée donnée il y a 3 ans.
Ilya Luzyanin