web-dev-qa-db-fra.com

Comment définir les dépendances lorsque j'utilise .NET Standard 2.0 DLL bibliothèques avec une application console .NET Framework?

Je ne peux pas comprendre comment dois-je configurer les dépendances (où ajouter les packages de nuget EntityFramework) dans ce scénario:

  1. 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 .

  2. 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.

  3. 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.

  4. 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 .

  5. 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?

11
Kamil

Les nouveaux fichiers du format SDK csprojne 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:

  1. 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.

  2. 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.

  3. 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>
    
  4. Rechargez le projet dans Visual Studio.

  5. Ajoutez une référence à Core.Application et ajoutez les packages Nuget dont vous avez besoin.

  6. 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:

enter image description here

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.

2
Stephen Kennedy