Совместное использование общего кода проектовShared Projects code sharing

Общие проекты позволяют писать общий код, на который ссылается несколько различных проектов приложений. Код компилируется как часть каждого ссылающегося проекта и может включать директивы компилятора, которые помогают внедрить функции, зависящие от платформы, в общую базу кода.Shared Projects let you write common code that is referenced by a number of different application projects. The code is compiled as part of each referencing project and can include compiler directives to help incorporate platform-specific functionality into the shared code base.

Общие проекты (иногда называемые также проектами общих ресурсов) позволяют создавать код, который является общим для нескольких целевых проектов, включая приложения Xamarin.Shared Projects (also sometimes called Shared Asset Projects) let you write code that is shared between multiple target projects including Xamarin applications.

Они поддерживают директивы компилятора, чтобы можно было условно включить код, зависящий от платформы, для компиляции в подмножество проектов, ссылающихся на общий проект.They support compiler directives so that you can conditionally include platform-specific code to be compiled into a subset of the projects that are referencing the Shared Project. Также поддерживается интегрированная среда разработки, помогающая управлять директивами компилятора и визуализировать, как код будет выглядеть в каждом приложении.There is also IDE support to help manage the compiler directives and visualize how the code will look in each application.

Если вы использовали компоновку файлов в прошлом для обмена кодом между проектами, то общие проекты работают аналогичным образом, но с значительно улучшенной поддержкой интегрированной среды разработки.If you have used file-linking in the past to share code between projects, Shared Projects works in a similar way but with much improved IDE support.

Что такое общий проект?What is a Shared Project?

В отличие от большинства других типов проектов, общий проект не имеет выходных данных (в виде библиотеки DLL), а код компилируется в каждый проект, который ссылается на него.Unlike most other project types a shared project does not have any output (in DLL form), instead the code is compiled into each project that references it. Это показано на схеме ниже — по сути, все содержимое общего проекта «копируется в» каждый проект ссылки и компилируется, как будто оно является частью.This is illustrated in the diagram below - conceptually the entire contents of the Shared Project is "copied into" each referencing project and compiled as though it was a part of them.

Архитектура общего проекта

Код в общем проекте может содержать директивы компилятора, которые будут включать или отключать разделы кода в зависимости от того, какой проект приложения использует код, который предлагается в цветовых полях платформы на схеме.The code in a Shared Project can contain compiler directives that will enable or disable sections of code depending on which application project is using the code, which is suggested by the colored platform boxes in the diagram.

Общий проект не компилируется самостоятельно, он существует исключительно как группирование файлов исходного кода, которые могут быть включены в другие проекты.A Shared Project does not get compiled on its own, it exists purely as a grouping of source code files that can be included in other projects. При ссылке на другой проект код фактически компилируется как часть этого проекта.When referenced by another project, the code is effectively compiled as part of that project. Общие проекты не могут ссылаться на другие типы проектов (включая другие общие проекты).Shared Projects cannot reference any other project type (including other Shared Projects).

Обратите внимание, что проекты приложений Android не могут ссылаться на другие проекты приложений Android. Например, проект модульного теста Android не может ссылаться на проект приложения Android.Note that Android application projects cannot reference other Android application projects - for example, an Android unit test project cannot reference an Android application project. Дополнительные сведения об этом ограничении см. в этом обсуждении форума.For more information about this limitation, see this forum discussion.

Пошаговое руководство по Visual Studio для MacVisual Studio for Mac Walkthrough

В этом разделе описывается создание и использование общего проекта с помощью Visual Studio для Mac.This section walks through how to create and use a Shared Project using Visual Studio for Mac. Полный пример см. в разделе Пример общего проекта .Refer the to Shared Project Example section for a complete example.

Создание общего проектаCreating a Shared Project

Чтобы создать новый общий проект, перейдите в файл > создать решение... (или щелкните правой кнопкой мыши существующее решение и выберите Добавить > добавить новый проект...):To create a new Shared Project navigate to File > New Solution... (or right click an existing solution and choosing Add > Add New Project...):

Новый общий проектNew Shared Project

На следующем экране выберите имя проекта и нажмите кнопку создать.On the next screen, choose the project name and click Create.

Новый общий проект показан ниже — Обратите внимание, что отсутствуют ссылки или узлы компонентов. они не поддерживаются для общих проектов.A new Shared Project is shown below - notice there are no References or Component nodes; these are not supported for Shared Projects.

Пустой общий проектEmpty Shared Project

Чтобы общий проект был полезен, на него должен быть указан хотя бы один проект, поддерживающий сборку (например, приложение или библиотека iOS или Android или проект PCL).For a Shared Project to be useful, it needs to be referenced by at least one build-able project (such as an iOS or Android application or library, or a PCL project). Общий проект не компилируется, если он не ссылается на него, поэтому ошибки синтаксиса (или любые другие) не будут выделяться, пока на него не будет ссылка.A Shared Project does not get compiled when it has nothing referencing it, so syntax (or any other) errors will not be highlighted until it has been referenced by something else.

Добавление ссылки на общий проект выполняется таким же образом, как и ссылка на обычный проект библиотеки.Adding a reference to a Shared Project is done the same way as referencing a regular Library project. На этом снимке экрана показан проект Xamarin. iOS, ссылающийся на общий проект.This screenshot shows a Xamarin.iOS project referencing a Shared Project.

Ссылка проекта на общий проект

После того как на общий проект ссылается другая библиотека или приложение, можно создать решение и просмотреть все ошибки в коде.Once the Shared Project is referenced by another library or application you can build the solution and view any errors in the code. Если на общий проект ссылаются два или более других проекта, в левом верхнем углу редактора исходного кода появится меню, показывающее, какие проекты ссылаются на этот файл.When the Shared Project is referenced by two-or-more other projects, a menu appears in the top-left of the source code editor that shows choose which projects reference this file.

Параметры общего проектаShared Project Options

Если щелкнуть правой кнопкой мыши общий проект и выбрать Параметры , количество параметров в нем меньше, чем у других типов проектов.When you right-click on a Shared Project and choose Options there fewer settings than other project types. Поскольку общие проекты не компилируются (самостоятельно), нельзя задавать выходные или параметры компилятора, конфигурации проектов, подписывания сборок или пользовательские команды.Because Shared Projects are not compiled (on their own), you cannot set output or compiler options, project configurations, assembly signing, or custom commands. Код в общем проекте фактически наследует эти значения от любых ссылок на них.The code in a Shared Project effectively inherits these values from whatever is referencing them.

Экран Параметры показан ниже: имя проекта и пространство имен по умолчанию являются единственными двумя параметрами, которые обычно меняются.The Options screen is shown below - the Project Name and the Default Namespace are the only two settings that you will generally change.

Параметры общего проекта

Пример общего проектаShared Project Example

В примере задачи используется общий проект для хранения общего кода, используемого как приложениями iOS, Android, так и Windows Phone.The Tasky example uses a Shared Project to contain the common code used by both the iOS, Android and Windows Phone applications. Оба SQLite.cs TaskRepository.cs файла исходного кода и имеют директивы компилятора (например,Both the SQLite.cs and TaskRepository.cs source code files utilise compiler directives (eg. #if __ANDROID__) для получения различных выходных данных для каждого из приложений, ссылающихся на них.#if __ANDROID__) to produce different output for each of the applications that reference them.

Полная структура решения показана ниже (в Visual Studio для Mac и Visual Studio соответственно):The complete solution structure is shown below (in Visual Studio for Mac and Visual Studio respectively):

Windows Phone проект можно перемещать из Visual Studio для Mac, хотя этот тип проекта не поддерживается для компиляции в Visual Studio для Mac.The Windows Phone project can be navigated from within Visual Studio for Mac, even though that project type is not supported for compilation in Visual Studio for Mac.

Ниже показаны выполняющиеся приложения.The running applications are shown below:

Примеры для iOS, Android, Windows Phone

СводкаSummary

В этом документе описано, как работают общие проекты, как их можно создавать и использовать в Visual Studio для Mac и Visual Studio, а также представлен простой пример приложения, демонстрирующий общий проект в действии.This document described how Shared Projects work, how they can be created and used in both Visual Studio for Mac and Visual Studio, and introduced a simple sample application that demonstrates a Shared Project in action.