107 votes

"La construction a échoué" sur la première base de données Scaffold-DbContext

Je suis en train de générer des classes à partir d'une base de données (EntityFramework la base de données de première approche).

Pour plus de commodité, je suis plus ou moins en marchant le long de ce tutoriel: https://docs.efproject.net/en/latest/platforms/full-dotnet/existing-db.html

J'en suis à un point où je suis en cours d'exécution, l'équivalent de cette ligne de code dans Visual Studio Manager Console:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -Verbose

Cette ligne de code qui génère l'erreur (avec -Verbose mode):

Using startup project 'EFSandbox'.
Using project 'EntityFrameworkCore'
Build started...
Build failed.

Je ne vois pas d'autres options que de produire tout sens de la sortie, et je ne vois aucune documentation sur cette erreur particulière. Si elle permet à tous, ce projet n'a pas un projet.fichier json, actuellement. Tout est dans le .fichier csproj, que je n'ai pas modifié manuellement.

199voto

Simon_Weaver Points 31141

Assurez-vous d'abord que votre projet s'appuie avant d'exécuter une nouvelle échafaudage de commande.

Ce qui arrive souvent à moi est que je vais commencer à écrire une ligne de code, de réaliser une nouvelle bd de la colonne est nécessaire, allez essayer d'échafaudage - et ensuite rendre compte au bout de 20 minutes la raison pour laquelle mon build (et d'échafaudage de commande) est un échec parce que j'ai un demi écrit une ligne de code. Oups.


Si vous avez plusieurs Dll vous pouvez générer dans le mauvais projet. Puis "Build failed' est en cours pour un certain nombre de raisons, très probablement que vous n'avez pas EFCore installé dans ce projet.

Dans le gestionnaire de paquets de la console il y a un Default project et c'est probablement l'endroit où vos fichiers est terminé.

La solution est simple et il vous suffit d'ajouter l' -Project interrupteur à vos options.

C'est l'intégralité de la commande que j'utilise:

Échafaudage-DbContext -Connexion "Server=(local);Base de données=DefenderRRCart;l'intégration de l' Security=True;Trusted_Connection=True;" Prestataire De Microsoft.EntityFrameworkCore.SqlServer -OutputDir RRStoreContext.Modèles -contexte RRStoreContext -Projet RR.DataAccess -force

Remarque: -force d'écraser des fichiers, mais pas de supprimer ceux qui n'existent plus. Si vous supprimez des tables de votre base de données, vous devez supprimer l'ancienne entité fichiers vous-même (juste de tri dans l'Explorateur par jour et supprimer les anciens).

Full options: https://docs.efproject.net/en/latest/miscellaneous/cli/powershell.html#scaffold-dbcontext

19voto

Mxaza Points 41

Construire manuellement le projet Ctrl + Maj + B m'a aidé à voir les erreurs qui causaient l'échec de la construction.

6voto

bcr Points 651

J'ai toujours eu ce problème, même quand je me suis assuré que mon projet (qui avait EF Base installée) construit correctement. Elle n'a toujours pas avec le "Build failed." le message, qui est visible lors de l'utilisation de l' -Verbsose drapeau.

J'ai eu à le faire dans mon cas:

  • Créer un throw-away ASP.NET web de Base de l'application de la solution
  • Ajouter le EF de Base de package NuGet à la solution
  • Ajouter le EF de Base fournisseur Sql Server package NuGet (parce que je suis à l'aide de sql server)
  • Ajouter le EF des Outils de Base de package NuGet
  • Commutateur -Project dans le gestionnaire de paquets de commande de la console pour pointer vers mon nouveau (et EF Core-configuré) du projet. La dernière étape était juste pour faire bonne mesure, puisqu'il n'y avait qu'un seul projet dans ma poubelle solution.

Il semble que tout ce processus implique un ASP.NET projet de base (ou seulement une .NET de Base du projet qui n'est pas une bibliothèque de classe) quelque part dans la solution, sans doute définir comme la solution de démarrage du projet.

4voto

James Joyce Points 21

À l'aide de VS2017 Aperçu 3, .NET Core 2 (EXTRAIT) j'ai eu toutes sortes de problèmes, mais finalement, j'ai pris l'approche proposée ci-dessus et a créé une toute nouvelle solution.

  1. Créé de nouveaux .NET solution de Base
  2. Édité le fichier de projet et changé de 1,0 à 2,0: <TargetFramework>netcoreapp2.0</TargetFramework>
  3. Fermeture/réouverture de la solution

Puis, il a ajouté l'Entity Framework:

  1. Dans PackageManager de la console:
    • Install-package Microsoft.EntityFrameworkCore.SqlServer -Version 2.0.0-preview2-finale
    • Install-package Microsoft.EntityFrameworkCore.Outils -Version 2.0.0-preview2-finale
    • Install-package Microsoft.EntityFrameworkCore.La conception de la Version 2.0.0-preview2-finale
  2. Édité le fichier de projet, et a ajouté: <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.Dotnet" Version="2.0.0-preview2-final" />

Puis;

  1. Ouvre l'invite de commande Powershell et changé de répertoire en Échafaudage dossier de projet
  2. Ran: dotnet ef dbcontext échafaudage "Server=BUREAU-MB70B7U; Database=ForexForme; Trusted_Connection=True" De Microsoft.EntityFrameworkCore.SqlServer -o Modèles
    • Où vous avez mis dans votre propre chaîne de connexion!
    • Les modèles est le nom de mon répertoire où j'ai mis toutes mes classes

3voto

Austin_Anderson Points 496

Pour moi, le problème était que j'essayais de l'installer dans un nouveau projet de console vierge à l'intérieur de la solution, qui ne contenait aucun fichier. L'échafaudage a donc essayé d'utiliser ce projet en tant que projet de démarrage et n'a pas trouvé Main . Je l'ai corrigé en ajoutant un nouveau fichier avec un fichier principal vide

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X