J’ai eu un problème où, en travaillant sur un nouveau projet MVC, dès que j’ai ajouté Html.Partial("Name")
à ma page _Layout.cshtml
, ASP.NET lançait cette exception lors du chargement de la page:
erreur CS0012: Le type ‘System.Object’ n’est pas dans un assembly référencé est défini. Ajoutez une référence à l’assembly “System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a” ajouté.
La solution consiste à append ceci à l’élément de compilation web.config
:
J’aimerais savoir pourquoi cela résout le problème.
Ce qui est étrange, c’est que la nouvelle application MVC que j’utilise contient une quantité de pages WebForms ASPX qui fonctionnent. J’ai copié une tonne de fichiers WebForms hérités dans ce nouveau projet MVC, des acres de code, et tout fonctionne, sans l’appel Html.Partial
, même si ma vue MVC est Html.Partial
.
Alors qu’est-ce qui se passe sur Terre? Que fait cette configuration et pourquoi les références de projet normales et les parameters de cadre cible ne sont-ils pas suffisants?
Cela est dû à une déconnexion et à une limitation entre le temps de génération et les environnements d’exécution d’un projet ASP.NET/MVC . La plupart du code dans un projet Web est compilé au moment de la construction (c.-à-d. F5) avec une exception aux vues ( Razor et code ASPX intégré) qui sont créées dynamicment au moment de l’exécution (dans IIS).
Pour la plupart, nous essayons de rendre ces deux environnements identiques et vous ne remarquerez généralement aucune différence. Malheureusement. vous avez rencontré l’un des cas où il y a une différence et que vous avez besoin d’append manuellement une référence pour que le moteur d’exécution simule le moment de la construction.
Ce qui se passe, c’est que vous avez probablement une dépendance à une bibliothèque portable ( Microsoft.Net.Http
). Les bibliothèques portables sont un peu différentes des bibliothèques normales, et nous avons besoin de références supplémentaires pour rendre le compilateur heureux. Au moment de la construction, nous détectons une dépendance sur une bibliothèque portable et ajoutons automatiquement toutes les références à C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades
. Malheureusement, le runtime ne le fait pas et vous devez append manuellement ces références jusqu’à ce que cela soit corrigé dans une prochaine version.
Pour référence ultérieure, vous pouvez simplement récupérer la section suivante et la coller directement dans Web.Config (cela représente l’instantané pour 4.5):
J’ai rencontré exactement la même erreur après avoir basculé vers VS 2017 & C # 7.1 et ajouté des références à System.ValueTuple dans mon projet .NET 4.6 ASP.NET
Problème résolu en activant Roslyn dans des projets ASP.NET sans manipuler les références dans web.config
L’avantage de ceci est que vous pouvez utiliser les nouvelles fonctionnalités C # dans les pages aspx et les vues MVC
J’ai rencontré une situation similaire. J’ai eu un projet MVC avec Unity. Le projet visait la version .Net 4.5.1 mais mon ordinateur manquait du dossier 4.5.1 dans le dossier C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework.
Donc, ce qui a résolu mon problème était de copier le dossier v4.5.1 de ma machine de développement vers la machine de construction.
Vous pouvez trouver le lien vers la réponse originale ici
Visual Studio 2017 MVC.RAZOR corrigé en l’ajoutant à la section web.config de l’application Web: voici un extrait de mon Web.Config juste après le noeud system.web: