web-dev-qa-db-fra.com

Ajouter le menu déroulant de la classe Voir le modèle ne montrant pas ma classe

J'ai créé une nouvelle application Internet C # asp.net mvc 4.0 (bêta) et mon comportement est quelque peu étrange dans la boîte de dialogue Ajouter une vue de Visual Studio 2010 (sp1). Lorsque je décide de créer une Vue fortement typée, dans la boîte de dialogue Ajouter une vue, la liste déroulante de la classe Modèle ne montre pas ma classe ViewModel. 

Pour l'enregistrement, oui, j'ai compilé l'application avant de déclencher la boîte de dialogue Ajouter une vue.

Je crois avoir identifié le problème, mais je ne sais pas comment le résoudre. Voici les étapes à suivre pour reproduire le comportement de quelqu'un qui voudrait reproduire le problème:

  1. Dans Visual Studio 2010 (SP1), créez une nouvelle application Internet C # asp.net MVC 4.0 (Bêta).
  2. Dans le dossier Modèles, créez une nouvelle classe simple appelée «GazouViewModel.cs».
  3. Générez l'application, ouvrez le HomeController, cliquez avec le bouton droit de la souris sur le Index () ActionResult et sélectionnez Ajouter une vue…
  4. Dans la boîte de dialogue Ajouter une vue, cochez la case «Vue fortement typée» et Dans la classe Modèle: la liste déroulante, vous remarquerez votre «GazouViewModel».

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur votre projet et sélectionnez "Gérer NuGet Packages".
  2. Recherchez, recherchez et installez le package “Bootstrapper.Autofac”.
  3. Reconstruisez l’application et vérifiez si votre «GazouViewModel» est toujours affiché Dans la boîte de dialogue de la liste déroulante Ajouter une vue.
  4. Le «GazouViewModel» devrait toujours s'afficher dans la liste déroulante.

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur votre projet et sélectionnez "Gérer NuGet Packages".
  2. Recherchez, recherchez et installez le package «Intégration Autofac ASP.NET MVC4 (Beta) ».
  3. Reconstruisez l’application et vérifiez si votre «GazouViewModel» est toujours affiché Dans la boîte de dialogue de la liste déroulante Ajouter une vue.
  4. Le «GazouViewModel» devrait toujours s'afficher dans la liste déroulante.

  1. Dans l'Explorateur de solutions, cliquez avec le bouton droit de la souris sur votre projet et AJOUTEZ une nouvelle classe (Class1.cs) partout où cela n'a pas d'importance.
  2. Faites que Class1 implémente IAutofacRegistration et implémente l'interface .
  3. Reconstruisez l’application et vérifiez si votre «GazouViewModel» est toujours affiché Dans la boîte de dialogue de la liste déroulante Ajouter une vue.
  4. Le «GazouViewModel» n'apparaît plus dans le menu déroulant de la classe de modèles .

Il semble que dès que je crée une classe qui implémente l’interface IAutofacRegistration et que je construise l’application, je ne suis plus capable de visualiser mes ViewModels dans cette liste déroulante.

Quelqu'un peut-il confirmer s'il obtient les mêmes résultats que moi? Et, plus important encore, comment peut-on résoudre ce problème?

IMPORTANT: J'ai essayé les mêmes étapes avec une application mvc 3.0 et le même problème se produit… ce n'est donc pas pertinent pour la version BETA.

Cordialement Vince

22
Vlince

UPDATE: Au moment d'écrire ces lignes, je ne peux plus reproduire l'erreur. Peut-être que les paquets NuGet que j'utilise ont été mis à jour vers une version plus récente et corrigent l'erreur par hasard.

Je marquerai ce post comme fermé.

Merci pour la contribution de chacun à ce sujet!

Vince

1
Vlince

Si le message d'erreur suivant s'affiche: "Exécution de la transformation: le fichier d'entrée semble utiliser une version de schéma non prise en charge par ce modèle. Cela peut entraîner des erreurs de compilation. Utilisez" Ajouter un nouvel élément généré "pour ajouter un modèle mis à jour".

Vous avez utilisé EF 5.x. Vous devez ajouter des métadonnées pour EF 5.x à votre modèle T4. En-tête de fichier, appelez DefineMetadata ()

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ include file="EF.Utility.CS.ttinclude"#><#@ output extension=".cs"#><#

DefineMetadata();

au bas de votre méthode de création de modèle

private void DefineMetadata()
{
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_NAME] = "CSharpDbContext.Types";
    TemplateMetadata[MetadataConstants.TT_TEMPLATE_VERSION] = "5.0";
    TemplateMetadata[MetadataConstants.TT_MINIMUM_ENTITY_FRAMEWORK_VERSION] = "5.0";
}
15
user1583948

J'ai résolu ce problème en étant fou pendant 2 heures, puis en supprimant Assembly.cs du dossier Properties de la solution. Après avoir reconstruit la solution, la liste déroulante de modèle "Ajouter une vue" a pu trouver soudainement tous mes ViewModels, ce qui est assez étrange.

Je suppose que la version d'assembly définie dans Assembly.cs s'est en quelque sorte mélangée avec la version réelle utilisée dans le projet. Quoi qu'il en soit, cela fonctionne maintenant pour mon cas.

9
Simon Sessingø

Ce qui a fonctionné pour moi, c’est de construire simplement la solution après avoir créé mon modèle. Ensuite, j'ai pu trouver mon modèle dans la liste déroulante. 

3
Sergio Flores

J'ai également remarqué ce problème (utilisation de MVC 4 Beta sur Visual Studio 2010). Le redémarrage de Visual Studio a résolu le problème pour moi.

2
Ivan Karajas

Il suffit de nettoyer et de construire votre solution. Cela a fonctionné pour moi.

1
Kiran Waghmare

Juste une autre solution à ajouter à la pile car aucune des autres ne fonctionnait pour moi. Ceci est un autre exemple de Visual Studio ne pouvant pas gérer de longs chemins de fichiers et des espaces de noms.

Dans mon cas, l'espace de nom était trop long pour s'afficher dans le menu déroulant "Classe de modèle". Le raccourcissement de l’espace de nommage (une douleur ridicule en soi) a fait que le menu déroulant fonctionnait à nouveau!

1
Gerard Wilkinson

En utilisant VS 2010 et MVC 3.0, à un moment donné, la liste déroulante de la classe Ajouter un modèle ne montrait aucune classe pour moi. La suggestion d'Ivan de redémarrer VS semblait fonctionner pour moi. 

J'ai essayé de supprimer AssemblyInfo.cs, fait un nettoyage et une reconstruction, mais ceux-ci ne résolvent pas le problème. Lorsque j'ai redémarré VS, les classes de modèle étaient de retour dans la liste déroulante.

0
Jayce

Je réalise que c'est un peu désuet. J'ai eu une situation similaire où mes classes ne seraient pas chargées dans l'assistant View Template. J'utilise VS 2012 avec MVC3. Tout le monde dans l'équipe était OK, mais heureusement, le vieux moi avait des problèmes. Après beaucoup de recherches et d’essais, la seule solution qui a toujours été corrigée est d’utiliser VS en mode sans échec (à partir de la commande Invite: "C:\Fichiers de programme (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"/safemode). Une de mes extensions doit être à l'origine du problème et en fonctionnant en mode sans échec, elles ne sont pas chargées.

0
Craig B