web-dev-qa-db-fra.com

Comment référencer un projet .NET Framework dans un projet .NET Core?

J'aimerais vraiment commencer à utiliser .NET Core et y migrer lentement des applications et des bibliothèques. Cependant, je ne peux pas mettre à niveau de manière réaliste toute ma base de code pour utiliser .NET Core, puis passer par le processus de test et de déploiement d'une pléthore d'applications en production.

Par exemple, si je crée une nouvelle application .NET Core et essaie de référencer un de mes projets .NET Framework, j'obtiens ce qui suit:

Les projets suivants ne sont pas pris en charge comme références: - Foobar.NetFramework possède des cadres cibles incompatibles avec les cibles du projet Foobar.NetCore en cours.

Foobar.NetCore: .NETCoreApp, Version = v1.0

Foobar.NetFramework: .NETFramework, Version = v4.5

Est-il possible de créer une nouvelle application .NET Core et de référencer mes bibliothèques .NET Framework existantes? Si oui, quel est le processus pour y parvenir? J'ai passé des heures à parcourir la documentation de Microsoft et à rechercher leurs problèmes sur GitHub, mais je ne trouve rien d'officiel sur la façon d'y parvenir ou sur leur vision à long terme pour ce processus.

24
Justin Helgerson

Oui, nous essayons actuellement la même chose. L'astuce consiste à vous assurer que vous prenez en charge les mêmes cadres .NET. Dans votre fichier project.json, assurez-vous que le framework correspond au framework du projet que vous souhaitez inclure. Par exemple:

"frameworks": {
    "net46": {  --This line here <<<<
      "dependencies": {
        "DomainModel": {
          "target": "project"
        },
        "Models": {
          "target": "project"
        }
      }
    }
  },

FYI: Vous devrez peut-être changer le cadre de votre .NET Core ou de vos anciens projets pour y parvenir. .NET Core peut être modifié simplement en modifiant le fichier project.json comme indiqué ci-dessus. Vous pouvez faire de même dans les projets .NET en cliquant avec le bouton droit sur le projet et en ouvrant les propriétés. Modifiez le niveau de cadre là-bas.

Une fois que vous avez fait correspondre les deux cadres de projet, vous devriez pouvoir les inclure. Bonne chance!

11
aholtry

Ancienne question, mais avec la sortie de .NetStandard 2.0 et .netcore 2.0 et vs2017.3, le jeu a changé.

Vous pouvez utiliser le Full .NET Framework (TFM) avec .NetCore 2.0, mais comment?

  1. Dans Visual Studio 2017.3, vous pouvez référencer le Full .NET Framework (n'importe quelle version) directement à partir d'un projet .NetCore2.

  2. Vous pouvez créer la bibliothèque de classes .NetStandard2 et référencer votre TFM. Référencez ensuite votre bibliothèque .NetStandard2 à partir de votre projet .NetCore2.

Par exemple, référencer json.net net45 à partir de .NetStandard2. Naviguez jusqu'au dossier et sélectionnez la version net45 (pas netstandard1.3)

Voir la dépendance dans l'image ci-dessous, pas d'avertissement jaune comme vous le voyez.

enter image description here

  1. Même si une bibliothèque Nuget n'est pas prête à être portée sur .Netstandard 2, vous pouvez utiliser n'importe quelle API de la bibliothèque conforme à net461.

Citation pour l'annonce .NET Core 2/Standard 2.0 avec liens:

.NET Core 2.0 est capable de référencer librement des bibliothèques qui ont été construites pour .NET Framework jusqu'à la version 4.6.1

Cependant, certaines bibliothèques peuvent échouer au moment de l'exécution si elles essaient d'utiliser des méthodes d'API qui ne sont pas disponibles sur .NET Core

Référence: .NET Core App target .NET framework 4.5.2 on Linux

Un besoin d'utiliser des bibliothèques .NET tierces ou des packages NuGet non disponibles pour .NET Core

Donc, uniquement dans les cas où les bibliothèques ou les packages NuGet utilisent des technologies qui ne sont pas disponibles dans .NET Standard/.NET Core, vous devez utiliser le .NET Framework.

Référence: Choix entre .NET Core et .NET Framework pour les applications serveur

Vous pouvez désormais référencer les bibliothèques .NET Framework à partir des bibliothèques .NET Standard à l'aide de Visual Studio 2017 15.3. Cette fonctionnalité vous aide à migrer le code .NET Framework vers .NET Standard ou .NET Core au fil du temps (commencez par les binaires, puis passez à la source). Il est également utile dans le cas où le code source n'est plus accessible ou est perdu pour une bibliothèque .NET Framework, ce qui lui permet d'être toujours utilisé dans de nouveaux scénarios.

Référence: Annonce de .NET Core 2.

9
M.Hassan