Comment ouvrir un ancien projet MVC dans Visual Studio 2012 ou Visual Studio 2013?

152

J'ai un ancien projet ASP.NET MVC 2 que je ne souhaite pas mettre à niveau vers MVC 3 ou MVC 4. Je travaille sur une nouvelle machine exécutant Windows 8, Visual Studio 2012 et Visual Studio 2013. Quand j'essaye d'ouvrir le MVC 2 projet dans VS 2012 ou VS 2013, je reçois l'erreur:

Ce projet est incompatible avec l'édition actuelle de Visual Studio

Le projet est ensuite déchargé et grisé dans l'Explorateur de solutions. Je ne souhaite pas installer une autre copie de Visual Studio. Comment puis-je ouvrir un ancien projet MVC dans une nouvelle version de Visual Studio?

Ahsteele
la source
Pourquoi avez-vous posé cette question si vous saviez?
Brian White
30
@BrianWhite Quand j'ai rencontré ce problème ce matin, j'ai fait une recherche rapide sur Google et je n'ai rien trouvé. Comme je suis familier avec le fonctionnement des fichiers de projet VS, j'ai eu une idée de la cause et d'une solution potentielle. Une fois que j'ai vérifié que la solution fonctionnait, je voulais partager ces connaissances. Selon les directives de Jeff, vous pouvez poser vos propres questions et y répondre .
ahsteele
1
Merci, je ne savais pas ça. Il y a un certain nombre de choses que je n'ai pas publiées parce que je n'ai vu personne la chercher ici.
Brian White
8
ahsteele, merci d'avoir publié la solution. Répondre à ses propres questions, lorsqu'une solution est trouvée, ajoute des connaissances à la communauté.
pomarc

Réponses:

291

L'ouverture d'un projet MVC non pris en charge dans Visual Studio 2012 ou Visual Studio 2013 est en fait assez facile à réaliser en deux étapes. En fait, comme l' indique le commentaire de bytebender , ces mêmes étapes devraient s'appliquer et fonctionner pour les projets MVC 1. Cependant, je ne les ai pas testés et je ne peux donc pas garantir qu'ils fonctionnent réellement.

En supposant que vous ne l'avez pas déjà fait, la première étape consiste à télécharger et installer MVC 1 , MVC 2 ou MVC 3 (fermez Visual Studio avant de démarrer l'installation).

Une fois que vous avez installé la version appropriée de MVC, le projet ne se chargera toujours pas dans VS 2012. Cela est dû au fait que les projets ASP.NET MVC sont un sous - type de projet du type de projet d'application Web. Cela signifie que le projet a des compléments et des fonctionnalités supplémentaires disponibles lorsqu'il est utilisé dans Visual Studio.

Visual Studio 2012 et Visual Studio 2013 sont limités dans leur compatibilité descendante avec ASP.NET MVC et d'autres types de projets. Malheureusement, l'installation des anciens bits MVC n'a pas changé cela. Visual Studio 2012 est compatible avec les versions de projet ASP.NET MVC 3 et 4. Visual Studio 2013 est compatible avec MVC 4 et MVC 5.

Pour charger le projet, vous devrez modifier le fichier projet. Pour ce faire, cliquez avec le bouton droit sur le projet déchargé et sélectionnez Modifier. Ce qui ouvrira le fichier projet sous forme de fichier texte XML. Trouvez le ProjectTypeGuidsnœud qui devrait ressembler à ceci:

<ProjectTypeGuids>
    {F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
</ProjectTypeGuids>

Supprimez le guide de projet approprié de la liste:

  • ASP.NET MVC 1: {603c0e0b-db56-11dc-be95-000d561079b0}
  • ASP.NET MVC 2: {F85E285D-A4E0-4152-9332-AB1D724D3325} (illustré dans l'exemple ci-dessus)
  • ASP.NET MVC 3: {E53F8FEA-EAE0-44A6-8774-FFD645390401}
  • ASP.NET MVC 4: {E3E379DF-F4C6-4180-9B81-6769533ABE47}

Avec le GUID approprié supprimé, le ProjectTypeGuidsdevrait ressembler à ceci:

<ProjectTypeGuids>
    {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
</ProjectTypeGuids>

Enregistrez le fichier et fermez l'éditeur de fichier de projet Visual Studio. Cliquez avec le bouton droit sur le projet et sélectionnez recharger. Si le projet ne se recharge pas, fermez et rouvrez Visual Studio. Vous devriez maintenant pouvoir travailler avec votre ancien projet ASP.NET MVC dans votre nouvelle version de Visual Studio.

Une chose importante à noter est qu'après ces modifications, Visual Studio n'est pas conscient qu'il s'agit d'un projet ASP.NET MVC; par conséquent, les fonctionnalités spécifiques au projet telles que "Ajouter un contrôleur, une vue, etc." ne sera pas présent dans les menus.

Ahsteele
la source
11
Cela fonctionne également pour MVC 1. Je n'ai pas pu recharger après avoir édité le fichier de projet. J'ai dû fermer et rouvrir Visual Studio, puis il a pu charger le projet MVC 1. Merci! +1
bytebender
1
excellent! fonctionne pour moi avec un petit ajout ... dans mon .cspproj j'avais un projectTypeGuid supplémentaire: {F85E285D-A4E0-4152-9332-AB1D724D3325}; qui devait être supprimé.
Kevin a gagné
2
@JookyDFW le problème avec l'utilitaire de migration est qu'il s'agit d'un utilitaire de migration . Pour des raisons non énumérées dans la question pour ce projet particulier, je n'ai pas pu mettre à niveau à partir de MVC 2. Même si le projet ne pouvait pas être mis à niveau, j'avais encore besoin de travailler dessus. Modifier le fichier de projet comme indiqué est la meilleure (seule?) Façon de travailler avec un projet MVC 2 dans VS 2012.
ahsteele
3
@RyanShripat ce n'était pas du tout mon expérience. Les anciennes versions d'ASP.NET MVC doivent être installées mais VS 2010 n'a aucun effet sur ce qui précède.
ahsteele
2
@Nanu merci pour le commentaire, pour être clair, c'est ce que je voulais dire par: " Une chose importante à noter est qu'après ces modifications, Visual Studio ne sait pas qu'il s'agit d'un projet ASP.NET MVC; donc les fonctionnalités spécifiques au projet comme "Ajouter un contrôleur, une vue, etc." ne sera pas présent dans les menus. "
ahsteele
4

J'ai utilisé l'approche de @ ahsteele (merci et 2x + 1s!), Mais j'avais une autre erreur: -

.csproj: erreur: l'opération n'a pas pu être terminée. Chaîne de classe non valide

Je ne trouve pas de citations pour la vraie cause de cela, mais j'ai pu obtenir VS2012RTM pour charger le projet avec succès en modifiant le fichier <ProjectGuid>. (Je ne sais pas comment cela s'est passé - cela fait partie d'une grande solution et VS08, VS10, VS11 Beta et VS2012RC ont tous mis à niveau le .csprojet au .slnfil du temps.

Ruben Bartelink
la source
1

Dans VS2017, la solution est de faire comme <ProjectTypeGuids></ProjectTypeGuids>ça.

Pas d'espace entre mesdames et messieurs, sinon cela vous fera perdre 48 heures de votre temps.

Cordialement

WickStargazer
la source