Vue d’ensemble du partage de codeSharing code overview

Ce document compare les différentes méthodes de partage de code entre les projets multiplateforme : .NET Standard, les projets partagés et les bibliothèques de classes portables, y compris les avantages et inconvénients de chacun.This document compares the different methods of sharing code between cross-platform projects: .NET Standard, Shared Projects, and Portable Class Libraries, including the benefits and disadvantages of each.

Il existe trois méthodes pour partager du code entre des applications multiplateformes :There are three methods for sharing code between cross-platform applications:

  • Bibliothèques de .NET standard : les projets .NET standard peuvent implémenter du code à partager entre plusieurs plateformes et peuvent accéder à un grand nombre d’API .net (selon la version)..NET Standard Libraries – .NET Standard projects can implement code to be shared across multiple platforms, and can access a large number of .NET APIs (depending on the version). .NET Standard 1,0-1,6 implémentent progressivement des ensembles d’API plus volumineux, tandis que .NET Standard 2,0 offre la meilleure couverture de la BCL .NET (y compris les API .NET disponibles dans les applications Xamarin)..NET Standard 1.0 - 1.6 implement progressively larger sets of APIs, while .NET Standard 2.0 provides the best coverage of the .NET BCL (including the .NET APIs available in Xamarin apps).
  • Projets partagés : utilisez le type de projet ressource partagée pour organiser votre code source, et utilisez les #if directives de compilateur nécessaires pour gérer les exigences spécifiques à la plateforme.Shared Projects – Use the Shared Asset Project type to organize your source code, and use #if compiler directives as required to manage platform-specific requirements.
  • Bibliothèques de classes portables (obsolètes) : les bibliothèques de classes portables (classes portables) peuvent cibler plusieurs plateformes avec une surface d’API commune et utiliser des interfaces pour fournir des fonctionnalités spécifiques à la plateforme.Portable Class Libraries (deprecated) – Portable Class Libraries (PCLs) can target multiple platforms with a common API surface, and use Interfaces to provide platform-specific functionality. Les classes portables sont déconseillés dans les dernières versions de Visual Studio utilisent à la – place .NET standard.PCLs are deprecated in the latest versions of Visual Studio – use .NET Standard instead.

L’objectif d’une stratégie de partage de code est de prendre en charge l’architecture illustrée dans ce diagramme, où un seul code base peut être utilisé par plusieurs plateformes.The goal of a code-sharing strategy is to support the architecture shown in this diagram, where a single codebase can be utilized by multiple platforms.

Architecture d’application de code partagéShared code application architecture

Cet article compare les méthodes disponibles pour vous aider à choisir le type de projet adapté à vos applications.This article compares the methods available to help you choose the right project type for your applications.

Bibliothèques .NET Standard.NET Standard Libraries

Les bibliothèques de .NET standard fournissent un ensemble bien défini de bibliothèques de classes de base qui peuvent être référencées dans différents types de projets, y compris des projets multiplateformes tels que Xamarin. Android et Xamarin. iOS..NET Standard libraries provide a well defined set of the base class libraries that can be referenced in different project types, including cross-platform projects like Xamarin.Android and Xamarin.iOS. .NET Standard 2,0 est recommandé pour une compatibilité maximale avec le code d' .NET Framework existant..NET Standard 2.0 is recommended for maximum compatibility with existing .NET Framework code.

Diagramme de .NET Standard.NET Standard diagram

AvantagesBenefits

  • Vous permet de partager du code entre plusieurs projets.Allows you to share code across multiple projects.
  • Les opérations de refactorisation mettent toujours à jour toutes les références affectées.Refactoring operations always update all affected references.
  • Une plus grande surface de la bibliothèque de classes de base .NET (BCL) est disponible que les profils PCL.A larger surface area of the .NET Base Class Library (BCL) is available than PCL profiles. En particulier, .NET Standard 2,0 a presque la même surface d’API que le .NET Framework et est recommandé pour les nouvelles applications et le portage des classes portables existants.In particular, .NET Standard 2.0 has almost the same API surface as the .NET Framework and is recommended for new apps and porting existing PCLs.

InconvénientsDisadvantages

  • Impossible d’utiliser des directives de compilateur comme #if __IOS__ .Cannot use compiler directives like #if __IOS__.

RemarquesRemarks

.NET Standard est semblable à la bibliothèque PCL, mais avec un modèle plus simple pour la prise en charge des plateformes et un plus grand nombre de classes de la BCL..NET Standard is similar to PCL, but with a simpler model for platform support and a greater number of classes from the BCL.

Projets partagésShared Projects

Les projets partagés contiennent des fichiers de code et des ressources qui sont incluses dans tout projet qui les référence.Shared Projects contain code files and assets that are included in any project that references them. Les projets de partage ne produisent pas leur propre sortie compilée.Share projects do not produce compiled output on their own.

Cette capture d’écran montre un fichier solution contenant trois projets d’application (pour Android, iOS et Windows), avec un projet partagé qui contient des fichiers de code source C# courants :This screenshot shows a solution file containing three application projects (for Android, iOS, and Windows), with a Shared project that contains common C# source code files:

Solution de projet partagéShared project solution

L’architecture conceptuelle est présentée dans le diagramme suivant, où chaque projet comprend tous les fichiers sources partagés :The conceptual architecture is shown in the following diagram, where each project includes all the shared source files:

Diagramme de projet partagéShared project diagram

ExempleExample

Une application multiplateforme qui prend en charge iOS, Android et Windows nécessiterait un projet d’application pour chaque plateforme.A cross platform application that supports iOS, Android, and Windows would require an application project for each platform. Le code commun réside dans le projet partagé.The common code lives in the Shared Project.

Un exemple de solution contient les dossiers et projets suivants (les noms de projet ont été choisis pour l’expressivité, vos projets n’ont pas besoin de suivre ces instructions d’affectation de noms) :An example solution would contain the following folders and projects (project names have been chosen for expressiveness, your projects do not have to follow these naming guidelines):

  • Projet Shared – Shared contenant le code commun à tous les projets.Shared – Shared Project containing the code common to all projects.
  • Projet d’application AppAndroid – Xamarin. Android.AppAndroid – Xamarin.Android application project.
  • Projet d’application AppiOS – Xamarin. iOS.AppiOS – Xamarin.iOS application project.
  • AppWindows – projet d’application Windows.AppWindows – Windows application project.

Ainsi, les trois projets d’application partagent le même code source (les fichiers C# dans Shared).In this way the three application projects are sharing the same source code (the C# files in Shared). Toutes les modifications apportées au code partagé sont partagées entre les trois projets.Any edits to the shared code will be shared across all three projects.

AvantagesBenefits

  • Vous permet de partager du code entre plusieurs projets.Allows you to share code across multiple projects.
  • Le code partagé peut être une branche basée sur la plateforme à l’aide de directives de compilateur (par exemple,Shared code can be branched based on the platform using compiler directives (eg. à l’aide de #if __ANDROID__ , comme indiqué dans le document Building Cross Platform applications (en anglais).using #if __ANDROID__ , as discussed in the Building Cross Platform Applications document).
  • Les projets d’application peuvent inclure des références spécifiques à la plateforme que le code partagé peut utiliser (comme l’utilisation Community.CsharpSqlite.WP7 de dans l’exemple Tasky pour Windows Phone).Application projects can include platform-specific references that the shared code can utilize (such as using Community.CsharpSqlite.WP7 in the Tasky sample for Windows Phone).

InconvénientsDisadvantages

  • Les refactorisations qui affectent le code à l’intérieur des directives du compilateur « inactive » ne mettent pas à jour le code à l’intérieur de ces directives.Refactorings that affect code inside 'inactive' compiler directives will not update the code inside those directives.
  • Contrairement à la plupart des autres types de projets, un projet partagé n’a pas d’assembly de « sortie ».Unlike most other project types, a Shared Project has no 'output' assembly. Pendant la compilation, les fichiers sont traités comme faisant partie du projet de référence et compilés dans cet assembly.During compilation, the files are treated as part of the referencing project and compiled into that assembly. Si vous souhaitez partager votre code en tant qu’assembly, .NET Standard ou les bibliothèques de classes portables constituent une meilleure solution.If you wish to share your code as a assembly then .NET Standard or Portable Class Libraries are a better solution.

RemarquesRemarks

Une bonne solution pour les développeurs d’applications qui écrivent du code destiné uniquement au partage dans leur application (et non distribuant à d’autres développeurs).A good solution for application developers writing code that is only intended for sharing in their app (and not distributing to other developers).

Bibliothèques de classes portablesPortable Class Libraries

Conseil

.NET Standard bibliothèques 2,0 sont recommandées sur les bibliothèques de classes portables..NET Standard 2.0 libraries are recommended over Portable Class Libraries.

Les bibliothèques de classes portables sont présentées en détail ici.Portable Class Libraries are discussed in detail here.

Diagramme de la bibliothèque de classes portablesPortable class library diagram

AvantagesBenefits

  • Vous permet de partager du code entre plusieurs projets.Allows you to share code across multiple projects.
  • Les opérations de refactorisation mettent toujours à jour toutes les références affectées.Refactoring operations always update all affected references.

InconvénientsDisadvantages

  • Obsolètes dans les dernières versions de Visual Studio, les bibliothèques .NET Standard sont recommandées à la place.Deprecated in the latest versions of Visual Studio, .NET Standard libraries are recommended instead. Reportez-vous à cette explication des différences entre PCL et .NET standard.Refer to this explanation of the differences between PCL and .NET Standard.
  • Impossible d’utiliser les directives du compilateur.Cannot use compiler directives.
  • Seul un sous-ensemble du .NET Framework peut être utilisé, déterminé par le profil sélectionné (pour plus d’informations, consultez Introduction à PCL ).Only a subset of the .NET framework is available to use, determined by the profile selected (see the Introduction to PCL for more info).

RemarquesRemarks

Le modèle PCL est considéré comme déconseillé dans les dernières versions de Visual Studio.PCL template is considered deprecated in the latest versions of Visual Studio.

RésuméSummary

La stratégie de partage de code que vous choisissez sera pilotée par les plateformes que vous ciblez.The code sharing strategy you choose will be driven by the platforms you are targeting. Choisissez une méthode qui convient le mieux à votre projet.Choose a method that works best for your project.

.NET Standard est le meilleur choix pour la création de bibliothèques de code pouvant être partagées (notamment la publication sur NuGet)..NET Standard is the best choice for building sharable code libraries (especially publishing on NuGet). Les projets partagés fonctionnent bien pour les développeurs d’applications qui envisagent d’utiliser un grand nombre de fonctionnalités spécifiques à la plateforme dans leurs applications multiplateformes.Shared Projects work well for application developers planning to use lots of platform-specific functionality in their cross-platform apps.

Bien que les projets PCL continuent à être pris en charge dans Visual Studio, .NET Standard est recommandé pour les nouveaux projets.While PCL projects continue to be supported in Visual Studio, .NET Standard is recommended for new projects.