web-dev-qa-db-fra.com

Impossible de définir une classe ou un membre qui utilise 'dynamique' car le compilateur a requis le type 'System.Runtime.CompilerServices.DynamicAttribute'

J'essaie d'exécuter une application .NET MVC sur mon ordinateur local, fournie par GitHub.

Lorsque je lance l'exécution sur Visual Studio, tout est conforme et une nouvelle fenêtre de navigateur s'ouvre avec l'erreur suivante:

CS1980: Impossible de définir une classe ou un membre utilisant 'dynamique' car le compilateur a requis le type 'System.Runtime.CompilerServices.DynamicAttribute'

La section du compilateur dans la même fenêtre affiche l'erreur suivante:

 enter image description here

J'ai vérifié sur google et this semble être la même erreur.

Ce type utilisait lui-même un type dynamique, par contre je n'utilise aucun type dynamique, il est généré automatiquement par le compilateur .NET et j'utilise .net 4.5 qui devrait prendre en charge la dynamique.

J'ai essayé d'appliquer la même solution (Modification de toutes les références System.Core à 4.0) Mais le fait est qu'elles sont toutes déjà à la version 4.0.

Avez-vous une idée de comment résoudre ce problème?

29

J'ai eu une erreur similaire sur un projet que j'essayais de migrer. Essayez de recibler le cadre du projet dans une version ou deux, et une fois que vous avez trouvé une version cible pour laquelle vous ne rencontrez pas l'erreur, redéfinissez la cible avec la version qui vous posait problème à l'origine.

La même erreur se produisait sur un projet de site Web ciblé pour la version 4.6.2 qui faisait référence à certaines bibliothèques plus anciennes et qui était redirigé vers la version 4.5.1, ce qui a résolu le problème. J'ai immédiatement re-ciblé en 4.6.2 et je n'ai plus rencontré l'erreur.

17
Granicus

J'ai soudainement eu cette erreur quelques jours après la mise à jour vers VS2015.3 à l'aide de l'application MVC 'traditionnelle' (et non de la nouvelle application .NET Core/vNext).

Il s'avère que cette erreur peut être un complete red hareng.

Assure-toi:

  • Vous n'avez pas d'autres erreurs du tout
  • Vous avez vérifié dans la fenêtre de sortie les erreurs qui n'apparaissent pas dans la fenêtre "Sortie".
  • Assurez-vous de ne pas avoir références contradictoires

Dans mon cas, une erreur TypeScript entraînait une erreur et, pour une raison quelconque, provoquait également cette erreur dynamique étrange de "red hareng".

 enter image description here

Mon correctif était d'aller dans le fichier .csproj et de mettre à jour la version 1.8 des outils TypeScript (il est nécessaire de décharger le projet et de le modifier à la main). Comme je l'ai dit, cela n'a rien à voir avec l'erreur, mais je mentionne les détails, car quelqu'un d'autre pourrait se retrouver avec le même problème.

Je crois que la version 1.7 n’a pas accepté «Aucune» pour le système de modules TypeScript alors que la version 1.8 l’a acceptée, d’où l’erreur.

8
Simon_Weaver

J'avais le même problème, mais aucune des réponses ici ne l'a résolu, mais m'a orienté dans la bonne direction. Je pense que je n'ai pas mis à jour la version .NET de ma machine vers la plus récente. Après l'avoir installé, j'ai annulé le cadre ciblé (comme suggéré), reciblé le nouveau cadre et effectué quelques opérations supplémentaires: 

  1. Réinstallez TOUS les paquets en exécutant ceci dans le gestionnaire de paquets:

    update-package -reinstall

J'ai également comparé mon projet à celui qui fonctionnait pour 4.5 et je l'ai fait:

  1. J'ai ouvert mon fichier de projet et supprimé tous les éléments liés à "BCL".
  2. Désinstallation de tous les packages "BCL" dans le gestionnaire de packages NuGet pour le projet (suppose que ce n'est pas nécessaire de passer à la version 4.5 + ...?)
  3. Suppression d'une ancienne version de package de System.Net.Http, qui n'a pas été mise à jour pour une raison quelconque (voir web.config - les versions devraient afficher oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0").
  4. Il faut redémarrer VS.
  5. Reconstruire la solution.
  6. L'erreur est maintenant partie. ;)

Une autre chose que j'ai faite pour résoudre d'autres erreurs a été d'effacer le cache des composants en supprimant tous les fichiers ici:

C:\Users\{USERNAME}\AppData\Local\Microsoft\VisualStudio\14.0\ComponentModelCache\

[Rant] gaspillé une journée entière avec tout cela. Merci à MS d’avoir volé un jour de plus de ma vie pour résoudre des problèmes insensés qui ne devraient jamais être. Chaque fois que j'effectue une mise à niveau, j'ai toujours une merveilleuse surprise et un joli jeu de correction du hareng rouge. Ne serait-il pas nuisible de détecter ces conflits pour ceux qui mettent à niveau d'anciens projets? Peut-être de meilleures traces d'erreur quand les choses vont mal? Je doute que ce soit si difficile. Peut-être même quelque chose comme AsmSpy, mais plus avancé, intégré à VS? [/ rant]

6
James Wilkins

L'ajout d'une référence à System.Dynamic.Runtime l'a fait pour moi.

5
Fredrik Hall

J'ai eu la même erreur, il n'y avait que 2 tables inutilisées de mon ensemble de bases de données que je devais supprimer. Je me demande pourquoi cela a fonctionné alors que je changeais manuellement qc dans un code généré automatiquement, mais après la suppression, cela fonctionnait.

Soyez donc conscient que de telles incohérences peuvent aussi causer cette erreur.

1
thestruggleisreal

Ma solution a été de corriger la version de MVC dans web.config sous le dossier Views. Par exemple. le projet a fait référence à la version 5.2.2.0 de MVC Assembly, mais la version 5.2.4.0 du fichier Views/web.config était (voir image).

Image

0
Geafer