Совместное использование Общие сведения о кодеSharing code overview

В этом документе сравнивается различных методов совместное использование кода между проектами кросс платформенных: .NET Standard, проектах общих и переносимых библиотек классов, включая преимущества и недостатки каждого из них.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.

Для совместного использования кода между кросс платформенных приложений тремя способами:There are three methods for sharing code between cross-platform applications:

  • Стандартные библиотеки .NET — проектов .NET Standard, можно реализовать код можно было использовать на различных платформах и также может быть большое количество API-интерфейсы .NET (в зависимости от версии)..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 реализовать расширяющийся набор интерфейсов API, тогда как .NET Standard 2.0 предоставляет лучшие מסגושוםטו BCL .NET (включая API .NET, доступных в приложениях 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).
  • Общие проекты — использовать общий проект средства для организации исходного кода и использовать #if директивы компилятора, когда возникает необходимость управлять требованиями к конкретной платформы.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.
  • Переносимые библиотеки классов (устаревшая версия) — переносимых библиотек классов (PCL) можно нескольких платформ с общую область API и использовать интерфейсы для предоставления функциональных возможностей платформы.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. PCL являются устаревшими в последних версиях Visual Studio – вместо этого используйте .NET Standard.PCLs are deprecated in the latest versions of Visual Studio – use .NET Standard instead.

Стратегии совместного использования кода должен поддерживать архитектуру, описанную в этой схеме, где можно использовать единую базу кода на нескольких платформах.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.

Общие архитектуры приложения кодаShared code application architecture

В этой статье сравниваются методы, доступные для помощи в выборе типа правой проекта для ваших приложений.This article compares the methods available to help you choose the right project type for your applications.

Стандартные библиотеки .NET.NET Standard Libraries

.NET standard библиотеки предоставляют хорошо определенного набора библиотек базовых классов, которые можно указывать в разных типах проектов, включая кросс платформенные проекты Xamarin.Android и 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 рекомендуется обеспечить максимальную совместимость с существующим кодом .NET Framework..NET Standard 2.0 is recommended for maximum compatibility with existing .NET Framework code.

.NET standard схеме.NET Standard diagram

ПреимуществаBenefits

  • Позволяет совместно использовать код в нескольких проектах.Allows you to share code across multiple projects.
  • Операции рефакторинга всегда обновления всех затронутых ссылок.Refactoring operations always update all affected references.
  • Большую контактную зону библиотеки классов .NET Base (BCL) доступен, чем профили PCL.A larger surface area of the .NET Base Class Library (BCL) is available than PCL profiles. В частности .NET Standard 2.0 имеет почти же поверхность API как .NET Framework и рекомендуется для новых приложений и переноса существующих PCL.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.

НедостаткиDisadvantages

  • Невозможно использовать директивы компилятора, например #if __IOS__.Cannot use compiler directives like #if __IOS__.

ПримечанияRemarks

.NET standard — аналогичную PCL, но более простую модель для поддержки платформы и большее количество классов из библиотеки базовых Классов..NET Standard is similar to PCL, but with a simpler model for platform support and a greater number of classes from the BCL.

Общие проектыShared Projects

Общие проекты содержат файлы кода и средств, включенных в любом проекте, который ссылается на них.Shared Projects contain code files and assets that are included in any project that references them. Выходные данные компиляции сами по себе не создают проекты общего ресурса.Share projects do not produce compiled output on their own.

На этом снимке экрана показан файл решения, содержит три проекта приложения (для Android, iOS и Windows) с Shared проект, содержащий общих исходных файлов C# кода: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:

Общий проект решениеShared project solution

Концептуальная архитектура показана на следующей схеме, где каждый проект содержит файлы общего источника:The conceptual architecture is shown in the following diagram, where each project includes all the shared source files:

Схема проекта SharedShared project diagram

ПримерExample

Кроссплатформенного приложения, который поддерживает iOS, Android и Windows требуется проект приложения для каждой платформы.A cross platform application that supports iOS, Android, and Windows would require an application project for each platform. Общий код находится в общий проект.The common code lives in the Shared Project.

Пример решения будет содержать следующие папки и проектов (имена проектов были выбраны для выразительности, могут не следовать этим правилам именования проектов):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):

  • Общий — общий проект, содержащий код, общими для всех проектов.Shared – Shared Project containing the code common to all projects.
  • AppAndroid — проект приложения Xamarin.Android.AppAndroid – Xamarin.Android application project.
  • AppiOS — проект приложения Xamarin.iOS.AppiOS – Xamarin.iOS application project.
  • AppWindows — проект приложения Windows.AppWindows – Windows application project.

Таким образом проектов три приложения совместное использование того же исходного кода (C# файлы в общем).In this way the three application projects are sharing the same source code (the C# files in Shared). Любые изменения в общий код будет общей для всех трех проектов.Any edits to the shared code will be shared across all three projects.

ПреимуществаBenefits

  • Позволяет совместно использовать код в нескольких проектах.Allows you to share code across multiple projects.
  • Общий код могут быть разветвлены зависимости от платформы, с помощью директивы компилятора (например)Shared code can be branched based on the platform using compiler directives (eg. с помощью #if __ANDROID__ , как описано в Создание межплатформенных приложений платформы документа).using #if __ANDROID__ , as discussed in the Building Cross Platform Applications document).
  • Проекты приложений может включать ссылки на платформы, которые могут использовать общий код (например, используя Community.CsharpSqlite.WP7 в образце Tasky для 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).

НедостаткиDisadvantages

  • Операции рефакторинга, которые влияют на код внутри директив «inactive» компилятор не будет обновлять код внутри этих директив.Refactorings that affect code inside 'inactive' compiler directives will not update the code inside those directives.
  • В отличие от большинства других типов проектов в общий проект имеет сборка не «вывод».Unlike most other project types, a Shared Project has no 'output' assembly. Во время компиляции файлы считаются частью ссылающийся проект и скомпилированные в этой сборке.During compilation, the files are treated as part of the referencing project and compiled into that assembly. Если вы хотите поделиться своим кодом, как сборка затем .NET Standard или переносимых библиотек классов являются более удачное решение.If you wish to share your code as a assembly then .NET Standard or Portable Class Libraries are a better solution.

ПримечанияRemarks

Хорошим решением для разработчиков приложений, написания кода, который предназначен только для совместного использования в приложении (и без распространения другим разработчикам).A good solution for application developers writing code that is only intended for sharing in their app (and not distributing to other developers).

Переносимые библиотеки классовPortable Class Libraries

Совет

Библиотеки .NET standard 2.0 предпочтительнее использовать переносимые библиотеки классов..NET Standard 2.0 libraries are recommended over Portable Class Libraries.

Переносимые библиотеки классов, здесь подробно рассматривается.Portable Class Libraries are discussed in detail here.

Схема библиотека переносимых классовPortable class library diagram

ПреимуществаBenefits

  • Позволяет совместно использовать код в нескольких проектах.Allows you to share code across multiple projects.
  • Операции рефакторинга всегда обновления всех затронутых ссылок.Refactoring operations always update all affected references.

НедостаткиDisadvantages

  • Рекомендуется использовать в последних версиях Visual Studio, библиотеки .NET Standard рекомендуется использовать вместо этого.Deprecated in the latest versions of Visual Studio, .NET Standard libraries are recommended instead. Ознакомьтесь с этой объяснение различий между переносимой библиотеки Классов и .NET Standard.Refer to this explanation of the differences between PCL and .NET Standard.
  • Невозможно использовать директивы компилятора.Cannot use compiler directives.
  • Только подмножество платформы .NET framework, доступные для использования, определяются выбранный профиль (см. в разделе введение 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).

ПримечанияRemarks

Шаблон PCL считается устаревшим в последних версиях Visual Studio.PCL template is considered deprecated in the latest versions of Visual Studio.

СводкаSummary

Совместное использование Выбор стратегии кода будет управляться платформы, которые вы используете.The code sharing strategy you choose will be driven by the platforms you are targeting. Выберите метод, который лучше всего подходит для вашего проекта.Choose a method that works best for your project.

.NET standard отлично подходит для создания библиотек общего кода (особенно публикации в NuGet)..NET Standard is the best choice for building sharable code libraries (especially publishing on NuGet). Общие проекты хорошо подходят для разработчиков приложений, которые планируется использовать множество функциональных возможностей платформы в своих приложениях на разных платформах.Shared Projects work well for application developers planning to use lots of platform-specific functionality in their cross-platform apps.

Проекты переносимой библиотеки Классов по-прежнему будет поддерживаться в Visual Studio, .NET Standard рекомендуется для новых проектов.While PCL projects continue to be supported in Visual Studio, .NET Standard is recommended for new projects.