web-dev-qa-db-fra.com

"Une erreur s'est produite lors de l'exécution du générateur de code sélectionné" dans l'échafaudage VS 2013

Je crée une nouvelle vue d'un modèle.
Le message d'erreur que je reçois est

Erreur
Une erreur s'est produite lors de l'exécution du générateur de code sélectionné:
'Accès au chemin
'C:\Utilisateurs\XXXXXXX\AppData\Local\Temp\SOMEGUID\EntityFramework.dll' est refusé '.

Je cours VS 2013 en tant qu'administrateur.

J'ai regardé Est-ce que MvcScaffolding est compatible avec VS 2013 RC en ligne de commande? mais cela ne semble pas résoudre le problème.

VS2013 C # 5 MVC5 Un tout nouveau projet a été lancé en 2013.

36
Brian

Le problème concernait un répertoire web.config et un package corrompus.

J'ai créé le nouveau projet et copié mes fichiers de code dans le nouveau projet. Par la suite, je suis retourné et j'ai exécuté diffs sur les fichiers de configuration et un dossier diff sur le projet lui-même.

Le problème était que les mises à jour avaient fortement jeté mon fichier de configuration avec de nombreux artefacts de mise à jour que j'ai finalement effacés.

Le deuxième problème était que l'ancien projet restait accroché à d'anciennes DLL censées être effacées avec l'application du package Nuget. J'ai donc effacé les dossiers obj et bin, puis le dossier du paquet. Après cela, j'ai pu faire réparer l'ancien bâtiment et le construire proprement.

Je n'ai pas cherché à savoir pourquoi le fichier de configuration ou le dossier du paquetage était si encombré, mais je suppose que c'est l'une des deux choses.

  1. Le paquet de pépites a peut-être une faille
  2. Le contrôle de source TFS a empêché le nuget de mettre à jour correctement les diverses dépendances.

Depuis lors, avant d'appliquer les mises à jour, je vérifie tout. Cependant, comme je n'ai pas mis à jour EF depuis longtemps, je n'ai aucune preuve que cela ait résolu mon problème d'EF ou d'échafaudage.

16
Brian

Erreur VS2013: une erreur s'est produite lors de l'exécution du générateur de code sélectionné: "Une configuration pour le type" SolutionName.Model.SalesOrder "a déjà été ajoutée ..."

J'ai eu ce problème alors que je suivais un cours Pluralsight "Données parent-enfant avec EF, MVC, Knockout, Ajax et validation". J'essayais d'ajouter un nouvel élément échafaudé à l'aide du modèle contrôleur MVC 5 avec vues, à l'aide d'Entity Framework.

La classe de contexte de données que j'utilisais, y compris un remplacement de la méthode OnModelCreating. La substitution était nécessaire pour ajouter certaines configurations de colonne de base de données explicites pour lesquelles les valeurs EF par défaut n'étaient pas adéquates. Ce remplacement était simple, efficace et sans bogues, mais (comme indiqué ci-dessus), il interférait avec la génération de code d'échafaudage du contrôleur.

Solution qui a fonctionné pour moi:

1 - J'ai supprimé (mis en commentaire) mon remplacement OnModelCreating et le modèle d'échafaudage s'est terminé sans aucun message d'erreur. Le code de mon contrôleur a été généré comme prévu.

2 - Cependant, essayer de construire le projet étranglé parce que 'Le modèle avait changé'. Comme mon code de contrôleur était maintenant correctement généré, j'ai restauré (sans commentaire) la substitution OnModelCreating et le projet a été construit et exécuté avec succès.

24
Bill B

J'ai pu résoudre ce problème et comprendre un peu mieux ce qui se passait. La meilleure partie est que je suis capable de recréer le problème et de le résoudre pour être sûr de mon explication ici. La solution était d'installer exactement la même version d'Entity Framework pour le projet de couche d'accès aux données et le projet Web.

Entity Framework v6.0.2 était installé dans ma couche d'accès aux données à l'aide de NuGet, Entity Framework n'était pas installé sur le projet Web. Lors de la tentative de création d'un contrôleur API Web avec un modèle Entity Framework, Entity Framework est installé automatiquement, mais il s'agit de l'une des versions les plus anciennes de la version 6.0.0. J'ai été surpris de voir deux versions d'Entity Framework installées, plus récente sur mon projet de couche de données et plus ancienne sur mon projet Web. Une fois, j'ai supprimé l'ancienne version et installé la version la plus récente sur Web Project. Le problème a disparu.

12
isingh

J'ai vérifié tous mes projets et chacun avait la même version d'Entity Framework. Dans mon cas, le problème était que n de mes projets visait .Net 4.0, les autres étant .Net 4.5.

Solution:

  1. Pour chaque projet de la solution Projet-> Propriétés-> Application: définissez Target Framework sur .Net 4.5 (ou tout autre élément nécessaire).
  2. Outils-> Gérer le package NuGet pour la solution. Trouver “Entity Framework” installé. Et cliquez sur Gérer. Désélectionnez tous les projets (notez les projets nécessitant un EF). Maintenant, Re-Manage EF et vérifiez que les projets dont vous avez besoin.
  3. Nettoyer et reconstruire la solution.
10
RitchieD

J'ai essayé chaque réponse sur chaque site Web que j'ai trouvé, et rien n'a fonctionné ... jusqu'à présent. Publier tard au cas où quelqu'un comme moi viendrait et aurait la même expérience frustrante que moi.

Mon problème était semblable à beaucoup d'autres, message d'erreur générique lorsque j'essayais d'utiliser un échafaudage pour essayer d'ajouter un nouveau contrôleur (ef6, webapi). Au départ, j’ai pu utiliser un échafaudage pour environ 15 contrôleurs, puis il a cessé de fonctionner un jour.

Solution finale:

  1. Ouvrez votre dossier de travail sur votre disque dur pour votre solution.
  2. Supprimer tout le contenu du dossier BIN
  3. Supprimer tout le contenu du dossier OBJ
  4. Solution propre, solution de reconstruction, ajout d'un contrôleur via un échafaudage

Voila! (pour moi)

9
erikrunia

Cela est généralement dû à un fichier non valide Web.config. J'ai eu le même problème et il s'est avéré que j'ai par inadvertance modifié le bloc de commentaires HTML <!-- --> En un bloc de commentaires côté serveur @* *@ (Via une action Remplacer tout).

Et si vous développez une application WinForms, essayez de regarder App.config.

4
Moslem Ben Dhaou

J'ai exactement le même problème. Ce problème a été rencontré pour la première fois en suivant le cours Pluralsight "Données parent-enfant avec EF, MVC, Knockout, Ajax et validation".

J'utilise MVC 5, EF 6.1.1 et le framework 4.5.2.

Même après la mise à jour de mon VS2013 pour mettre à jour 4, cette erreur persistait toujours.

A réussi à contourner ce problème gênant en modifiant DbSet en IDbSet dans la classe DbContext. La réponse était originaire de ici .

//From
public DbSet SalesOrders { get; set; }

//To
public IDbSet SalesOrders { get; set; }
4
scyu

Ce qui a fonctionné pour moi pour résoudre ceci: Fermez la solution, et ouvrez le projet en cliquant sur le fichier de projet et non sur le fichier de solution, ajoutez votre contrôleur et bobs votre oncle

3
Gerrie Pretorius

Aucun de ce qui précède n'a aidé pour moi.

J'ai constaté que la cause de mon problème était de remplacer OnModelCreating dans ma classe de contexte sur laquelle l'élément d'échafaudage dépendait. En commentant cette méthode, l’échafaudage fonctionne.

Je souhaite que Microsoft publie moins de code buggy.

3
Jim Taliadoros

J'ai constaté cette erreur avec un nouveau projet MVC5 lors de la référence à un modèle provenant d'un projet différent. En vérifiant le chemin, EntityFramework.dll existait. C'était en lecture seule cependant. Le moniteur de processus a montré qu'il y avait une erreur en essayant de supprimer le fichier. Définir EntityFramework.dll dans mon dossier de packages (copie stockée dans le contrôle de source) en écriture a contourné cette erreur, mais en a signalé une autre en indiquant qu'il ne pouvait pas charger l'Assembly EntityFramework, car il ne correspond pas à celui référencé. Ma classe de modèle a été définie dans un projet différent qui utilisait une version plus ancienne du framework d'entité. Le projet MVC5 faisait référence à EF 6 alors que le modèle était issu d’un projet référencé EF 4.4. La mise à niveau vers EF 6 dans le projet du modèle me l'a réparée.

2
Lindsey

Pour nous, cela a quelque chose à voir avec les configurations de construction, où nous avons une configuration de construction Debug | x64 que nous avions récemment utilisée, ce qui, rétrospectivement, semblait être lorsque l'échafaudage a cessé de fonctionner.

(Je suppose qu’il existe au moins 10 facteurs différents qui peuvent en être la cause, comme en témoignent les diverses réponses données sur SO que certaines personnes trouvent pour leur travail - mais qui ne fonctionnent pas pour d’autres, donc je ne dis pas que ma solution fonctionnera pour tout le monde).

Ce qui a fonctionné pour nous (avec VS 2013 Express for Web sur Windows 7 64 bits):

Cela (échafaudage) était PAS fonctionnait dans la configuration de Debug | x64 Build. Mais procéder de la manière suivante (et il semble que chaque étape est nécessaire - ne peut pas comprendre comment le faire de manière plus rationnelle) semble fonctionner pour nous.

  1. Commencez par passer à Debug | x86 - utilisez Solution (clic droit) Configuration Manager pour tous les projets de votre solution. (Debug | N'importe quel processeur peut également fonctionner).
  2. Nettoyez votre solution.
  3. Arrêtez Visual Studio. (Je ne peux pas le faire fonctionner si je saute ça).
  4. Ouvrez Visual Studio.
  5. Ouvrez votre solution.
  6. Construisez votre solution.
  7. Maintenant, essayez d'ajouter des éléments d'échafaudage; pour nous, cela a fonctionné à ce stade, nous n'avons plus reçu le message d'erreur disant quelque chose à propos de "Il y a eu une erreur lors de l'exécution du générateur de code sélectionné".

Si vous devez revenir à une configuration de construction qui ne fonctionne pas, vous pouvez le faire après avoir échafaudé tout ce dont vous avez besoin pour le moment. Nous sommes revenus à notre Debug | x64 après l’échafaudage de ce dont nous avions besoin.

2
DWright

Ci-dessous était mon erreur dans l'image et ci-dessous étapes problème résolu pour moi.

Une erreur s'est produite lors de l'exécution du générateur de code sélectionné:
'Echec de la mise à niveau des informations de dépendance pour le projet. Veuillez restaurer le projet et réessayer. '

Étapes:

  1. Accédez à votre projet et mettez à jour tous les packages Nuget vers la dernière version.
  2. Construisez votre application jusqu'à ce que Build soit un succès.
  3. Fermez la solution et rouvrez-la.
  4. Et essayez d’ajouter des fichiers comme contrôleur, classe, etc.

J'espère que ça aide, merci

Cliquez ici pour voir l'image d'erreur

1
Manjunath K

Ceci est généralement lié à un format de votre Web.config

Reconstruisez la solution et recherchez sous Erreurs, onglet Messages. Si vous rencontrez des problèmes de format avec web.config, vous le verrez ici. Corrige ça et réessaye.

Exemple: j'avais connectionstring au lieu de connectionString

1
Marko

J'ai eu ce problème en essayant d'ajouter un contrôleur Api à mon application Web ASP.NET MVC pour une raison complètement différente de celle des autres réponses données. J'avais accidentellement inclus un attribut StringLength avec une déclaration IndexAttribute pour une propriété d'entier en raison d'une opération de copier-coller:

[Index]
[IndexAttribute("NumTrainingPasses", 0), StringLength(50)]
public int NumTrainingPasses { get; set; }

Une fois que je me suis débarrassé de la déclaration IndexAttribute, j'ai pu ajouter un contrôleur Api pour le modèle contenant la propriété incriminée (NumTrainingPasses).

Pour aider les moteurs de recherche, voici le message d'erreur complet que j'ai reçu avant de résoudre le problème:

Une erreur s'est produite lors de l'exécution du générateur de code sélectionné:

Impossible de récupérer les métadonnées pour 'Owner.Models.MainRecord'. La propriété
'NumTrainingPasses' n'est pas un tableau String ou Byte. La longueur ne peut être configurée que pour les propriétés de tableau String ou Byte.

1
Robert Oschler

Cela m'est arrivé lorsque j'ai tenté de créer un nouvel échafaudage en dehors du dossier de niveau supérieur pour un Area .

  • Ma zone
    | - File.cs (essayé de créer un nouvel échafaud ici. Échec.)

J'ai simplement re-sélectionné ma région et le problème a disparu:

  • AyArea (Ajouter => nouvel élément d'échafaudage)

Notez qu'après la génération d'un échafaudage, vous êtes amené dans un endroit où vous ne pourrez pas créer un nouvel échafaudage sans sélectionner à nouveau la zone (au moins dans VS 2013).

0
P.Brian.Mackey

Je rencontre également ce problème avec MSVS2013 Update 4 et EF 6.0. Le message que je recevais était le suivant:

    there was an error running the selected code generator.
A configuration for type XXXX has already been added ...[]

J'ai un modèle avec environ 10 cours. J'ai échafaudé des éléments au début du projet sans aucun problème.

Après quelques jours d’ajout de fonctionnalités, j’ai essayé d’échafauder une autre classe du modèle, mais une erreur l’empêchait de le faire.

J'ai essayé de mettre à jour MSVS de la mise à jour 2 à la mise à jour 4, de commenter ma méthode OnModelCreating et d'autres idées proposées sans succès.

Comme moyen temporaire de poursuivre le projet, j’ai créé un projet asp.net différent, y ai collé mes classes de modèle (j’utilise couramment l’API, de sorte qu’il n’ya que peu d’annotation) et créé avec succès mon contrôleur et mes vues.

Après cela, j'ai collé les classes créées dans le projet d'origine et corrigé quelques erreurs (principalement les noms de dbset).

Cela semble fonctionner, bien que je suppose que je trouverai toujours des erreurs liées aux relations entre les classes (en raison du manque de configuration fluide lors de la création).

J'espère que cela aide les autres utilisateurs.

0
user1839387

Je sais que je suis en retard, mais c'était tellement frustrant que j'espère que cela aidera un peu ...

Mon problème était semblable à celui de nombreuses expériences ici, message d'erreur générique lorsque j'essayais d'ajouter une nouvelle vue ou d'utiliser un échafaudage pour ajouter un nouveau contrôleur.
J'ai découvert que MVC 5 et EF 6 constructeur de modèles ne sont pas de bons amis:

Ma solution:
1.Commentez ModelBuilder dans votre classe de contexte.
2.Clean Solution, Rebuild Solution.
3.Ajouter la vue et le contrôleur via un échafaudage
4. Uncomment modelbuilder.

Peut-être un peu non conventionnel - mais cela a fonctionné! (pour moi)

0
freddy

Reconstruire la solution fonctionne pour moi. avant de reconstruire, je trouve le numéro de référence de mon 'ApplicationDbContext' égal à zéro, ce qui est impossible, afin de reconstruire la solution, tout va bien maintenant.

0
simon9k

Lorsque je crée les modèles et le contexte dans un projet distinct (ma couche d'accès aux données), je rencontre souvent cette erreur lorsque je crée les modèles et le contexte. J'oublie d'ajouter la chaîne de connexion de contexte au projet Web.Config du projet MVC.

0
John S

J'avais ce problème dans VS 2017. La cible de la plateforme (dans les propriétés du projet> Construire> Général) était définie sur "x64". L'échafaudage a commencé à fonctionner après avoir été remplacé par "N'importe quel processeur".

0
billw

Au cas où cela aiderait quelqu'un, j'ai renommé l'espace de noms dans lequel le modèle résidait, puis j'ai reconstruit le projet, puis je l'ai renommé, puis reconstruit, puis tout a fonctionné.

0
Adam Marshall

J'ai rencontré le même problème lorsque, dans la propriété de référence EF de mon application MVC (dans la fenêtre Propriétés), "Version spécifique" était marquée comme étant False et dans mon autre projet (contenant DBContext et modèles) qui était référencé à partir de l'application MVC que la propriété de référence EF était marquée en tant que Vrai. Quand j'ai marqué Faux, tout allait bien.

0
Iwona Kubowicz
  • vs2013 mise à jour 4
  • ef 5.0.0
  • ibm db2connector 10.5 fp 5

modifier le fichier web.config en tant que tel: suppression du/des fournisseur (s) de la balise ef:

<entityFramework>
</entityFramework>

ajout de balises de chaîne de connexion dans les sections de configuration:

</configSections>
<connectionStrings>
<add name=".." connectionString="..." providerName="System.Data.EntityClient" />
</connectionStrings>
0
gummylick