Je ne peux pas comprendre comment dois-je configurer les dépendances (où ajouter les packages de nuget EntityFramework) dans ce scénario:
Core.Persistence
projet qui se compile en .NET Standard 2.0 DLL. J'ai Entity Framework 6, des classes d'entités de base de données pour EF, DbContext etc. Il est censé dépendre uniquement de EntityFrameworkCore
.
Core.Domain
projet qui se compile également en .NET Standard 2.0 DLL bibliothèque. Je veux placer mes classes POCO d'objet métier ici. Ceci est supposé n'avoir aucune dépendance.
Core.Application
projet, il s'agit de .NET Standard 2.0 DLL bibliothèque. J'ai ici toute la logique d'application. Cela dépend de Core.Persistence
car il effectue des requêtes de base de données et Core.Domain
car il produit des objets commerciaux à partir des résultats de la requête.
Client.ConsoleClient
projet. Il rend exécutable .NET Framework 4.7.2. Il est censé dépendre uniquement de Core.Application
, mais j'ai un problème ici .
Client.WindowsClient
projet sur lequel je ne veux pas me concentrer dans cette question.
Voilà donc ce que j'ai fait:
Le problème est que je reçois System.IO.FileLoadException
lorsque j'essaie d'appeler la méthode à partir de Core.Application
.
Il dit qu'il ne peut pas trouver System.Interactive.Async
fichier (qui est une dépendance de EntityFrameworkCore
). Après avoir ajouté ce fichier en tant que dépendance - il existe d'autres System.IO.FileLoadException
les erreurs.
Donc, temporairement, j'ai ajouté le package EF6 Core NuGet à mon Client.ConsoleClient
, et problèmes avec System.IO.FileLoadException
sont partis, mais je sens que je fais quelque chose de mal.
À ce moment, j'ai compris que Visual Studio ne copie pas les fichiers DLL de Core.xxx
projette les sorties dans Client.ConsoleClient
sortie du projet, et c'est pourquoi j'obtiens des erreurs.
Comment résoudre ce problème correctement?
Les nouveaux fichiers du format SDK csproj
ne jouent pas très bien avec les fichiers de projet au format hérité.
Mais n'ayez crainte car les applications de la console .NET Framework peuvent utiliser le format SDK!
Assurez-vous que votre travail est dédié au contrôle de code source ou faites une copie du dossier, puis procédez comme suit:
Supprimer Properties\AssemblyInfo.cs
de Client.ConsoleClient
. Nous n'en aurons plus besoin car le contenu de ce fichier va maintenant dans le fichier de projet.
Supprimer packages.config
- encore une fois, les références Nuget seront stockées dans le fichier de projet - c'est si vous avez besoin de références Nuget après avoir référencé Core.Application
plus tard.
Ouvert Client.ConsoleClient.csproj
dans un éditeur de texte et changez le contenu en:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net472</TargetFramework>
</PropertyGroup>
</Project>
Rechargez le projet dans Visual Studio.
Ajoutez une référence à Core.Application
et ajoutez les packages Nuget dont vous avez besoin.
Si vous aviez du contenu dans Properties\AssemblyInfo.cs
autre que les versions 1.0.0.0, cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions et cliquez sur Package. Ajoutez les détails dont vous avez besoin, puis enregistrez:
C'est tout, bien qu'il y ait 2 autres choses que vous pourriez faire selon votre situation:
S'il y a des fichiers qui doivent être exclus, vous devrez les exclure, car le nouveau format de projet inclut tous les types de fichiers pertinents par défaut.
Vous devrez peut-être définir la version linguistique. Dans mon aperçu de Visual Studio 2019, latest
(dernière version mineure de C #) est la valeur par défaut, je n'ai donc pas besoin de le faire.