Nous avons une ancienne application Web ASP.NET MVC 3, construite en VS2010, qui n'a pas été compilée depuis la mise à jour de sécurité de la semaine dernière.
Le problème est que la référence à System.Web.Mvc.dll est cassée.
Lorsque j'ouvre le fichier de solution sur notre machine de construction, où la mise à jour de sécurité n'a pas été exécutée, et que j'ouvre la boîte de dialogue de propriétés pour Références-> System.Web.MVC, tout se passe bien.
Le chemin d'accès est C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll Version 3.0.0.0
Mais lorsque j'ouvre le fichier de solution sur une machine de développement sur laquelle la mise à jour de sécurité a été exécutée, Références-> System.Web.MVC est signalé comme manquant. Si je l'enlève et essaie de le rajouter à l'aide de la boîte de dialogue Ajouter une référence de VS2010, cela ne s'affiche pas.
Flâner sur le Web m'a amené à faire des suggestions concernant la mise à jour de MVC à l'aide de NuGet. Nous n'avons pas utilisé NuGet, dans nos projets VS2010, alors cela ne semble pas tout à fait correct, dans cette situation. J'ai quand même essayé, et j'ai fini avec une demi-douzaine de références manquantes.
Lorsque je regarde les propriétés de "C:\Program Files\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll" dans l'Explorateur Windows, sur la machine de génération, je vois la version 3.0.0.0.
Quand je regarde les propriétés sur la machine dev, je vois la version 3.0.50813.1.
Ce dont j'ai besoin, c'est d'un moyen de changer la façon dont je crée et exécute afin que je puisse construire et exécuter indépendamment de laquelle de ces deux DLL est installé dans le .NET 3.0 Framework.
Des idées?
Première tentative - si l’assemblée est manquante, ajoutez-la. J'ai supprimé l'ancienne référence manquante. Ensuite, j'ai copié la DLL à partir du dossier "ASP.NET MVC3\Assemblies" dans un dossier de mon projet. Définissez-le comme "Copier toujours" et l'ajoutez comme référence.
Avec cela, le projet serait compilé dans VS2010, mais lorsque j'essayais de précompiler les pages avec aspnet_compiler, je reçois des avertissements:
(0): warning CS1702: Assuming Assembly reference 'System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' matches 'System.Web.Mvc, Version=3.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35', you may need to supply runtime policy
Jusqu'à présent, j'ai réussi à éviter de comprendre les politiques d'exécution, mais j'ai essayé d'ajouter ceci dans le fichier web.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
J'ai essayé à nouveau et j'ai eu les mêmes avertissements.
Ma question est la suivante: ai-je toujours un problème? Ou est-ce que je vais le résoudre malgré les avertissements?
Obtenez la dernière version de MVC3 via NuGet. Ouvrez votre projet dans Dev Studio. Ouvrez l'onglet Console du gestionnaire de packages au bas de Dev Studio. Ensuite, utilisez cette commande:
PM> Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
Si vous cliquez sur la touche de tabulation après "-Version", vous obtiendrez une liste de toutes les versions disponibles.
Si vous possédez une ancienne version de NuGet, vous risquez de recevoir une erreur vous invitant à la mettre à niveau. Si c'est le cas, ouvrez Outils-> Extension Manager pour installer la dernière version de NuGet. Notez que vous devez exécuter Dev Studio en tant qu'administrateur avant de pouvoir installer NuGet.
L'installation de MVC3 devrait mettre à jour Web.config dans votre projet.
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.1" newVersion="3.0.0.1" />
</dependentAssembly>
</assemblyBinding>
MVC 5
C:\Programmes (x86)\Microsoft ASP.NET\ASP.NET Pile Web 5\Packages\Microsoft.AspNet.Mvc.5.0.0\lib\net45\System.Web.Mvc.dll
MVC 4
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Web.Mvc.dll
MVC 3
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies\System.Web.Mvc.dll
MVC 2
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 2\Assemblies\System.Web.Mvc.dll
Où puis-je trouver une DLL System.Web.MVC dans un système sur lequel MVC 3 est installé?
Le moyen le plus simple de résoudre ce problème est d'installer ASP.NET MVC 3 à partir du programme d'installation de Web Platforms.
http://www.Microsoft.com/web/downloads/
Ou en utilisant la commande Nuget
Install-Package Microsoft.AspNet.Mvc -Version 3.0.50813.1
J'ai la même situation: Visual Studio 2010, aucun NuGet installé et une application ASP.NET utilisant System.Web.Mvc version 3.
Ce qui a fonctionné pour moi a été de définir chaque projet C # qui utilise System.Web.Mvc, d’accéder aux références dans l’explorateur de solutions et de définir les propriétés de System.Web.Mvc, avec Copy Local sur true et la version spécifique sur false le dernier a amené le champ Version à afficher la version actuelle sur cette machine.
dans VS 2017, j'ai nettoyé la solution et l'ai reconstruite, puis réparée
L'exemple de fichier mvcmusicstore.codeplex.com ouvert dans vs2015 a manqué certaines références, dont System.web.mvc.
Le correctif était de le supprimer des références et d'ajouter une référence: Choisir Extentions sous Assemblies, vous pouvez y trouver et ajouter System.Web.Mvc.
(Les autres assemblages que j'ai ajoutés avec les paquetages Nuget.)
Dans mon cas, j'avais toutes les références appropriées dans mon projet. J'ai trouvé qu'en construisant la solution les paquets de nuget étaient automatiquement restaurés.
Juste au cas où quelqu'un est dans une position où il obtient la même erreur. Dans mon cas, rétrograder Microsoft.AspNet.Mvc puis le mettre à niveau à nouveau m'a aidé. J'ai eu ce problème après avoir installé Glimpse et l'avoir retiré. System.Web.Mvc avait des références fausses d'une manière ou d'une autre, le nettoyage de la solution ou sa reconstruction ne fonctionnait pas dans mon cas. Il suffit d’essayer si aucune des réponses ci-dessus ne vous convient.
Eu ce problème dans vs2017, j'ai déjà eu MVC via nuget mais System.Web.Mvc ne figurait pas dans la liste "Assemblées" sous "Ajouter une référence".
La solution consistait à sélectionner "Extensions" sous "Assemblées" dans la boîte de dialogue "Ajouter une référence".