Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Многоплатформенные приложения пользовательского интерфейса приложений .NET (.NET MAUI) используют многонацелие для целевых платформ из одного проекта.
Проект для приложения .NET MAUI содержит папку "Платформы " с каждой дочерней папкой, представляющей платформу, на которую может ориентироваться .NET MAUI:
Папки для каждой целевой платформы содержат код для конкретной платформы, который запускает приложение на каждой платформе, а также любой дополнительный код платформы, который вы добавляете. Во время сборки система содержит только код из каждой папки при сборке для этой конкретной платформы. Например, при сборке для Android файлы в папке "Платформы>Android " будут встроены в пакет приложения, но файлы в других папках платформ не будут.
В дополнение к этому подходу с несколькими целевыми объектами по умолчанию приложения MAUI .NET также могут быть многоцелыми на основе собственных критериев имени файла и папки. Это позволяет структурировать проект приложения .NET MAUI, чтобы не помещать код платформы в вложенные папки папки "Платформы ".
Настройка многонацеливания на основе имен файлов
Стандартный шаблон с несколькими целевыми объектами — включить платформу в качестве расширения в имя файла кода платформы. Например, MyService.Android.cs представляет собой реализацию класса, зависящую MyService
от Android. Систему сборки можно настроить для использования этого шаблона, добавив следующий XML-код в файл проекта приложения .NET MAUI (CSPROJ) в качестве дочерних <Project>
элементов узла:
<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
<Compile Remove="**\*.Android.cs" />
<None Include="**\*.Android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\*.MaciOS.cs" />
<None Include="**\*.MaciOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
<Compile Remove="**\*.iOS.cs" />
<None Include="**\*.iOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\*.MacCatalyst.cs" />
<None Include="**\*.MacCatalyst.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
<Compile Remove="**\*.Windows.cs" />
<None Include="**\*.Windows.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
Этот XML-код настраивает систему сборки для удаления шаблонов имен файлов на основе платформы в определенных условиях:
- Не компилируйте код C#, имя файла которого заканчивается . Android.cs, если вы не создаете сборку для Android.
- Не компилируйте код C#, имя файла которого заканчивается . MaciOS.cs, если вы не создаете для iOS и Mac Catalyst.
- Не компилируйте код C#, имя файла которого заканчивается на .iOS.cs, если вы не создаете код для iOS.
- Не компилируйте код C#, имя файла которого заканчивается . MacCatalyst.cs, если вы не создаете для Mac Catalyst.
- Не компилируйте код C#, имя файла которого заканчивается . Файл Windows.cs, если вы не создаете сборку для Windows.
Важно!
Многонацелие на основе файлов можно объединить с многоцелевой ориентацией на основе папок. Дополнительные сведения см. в разделе "Объединение имен файлов и папок с несколькими целевыми объектами".
Настройка мультинацеливания на основе папок
Еще одним стандартным шаблоном многонацеливания является включение платформы в качестве имени папки. Например, папка с именем Android будет содержать код, зависящий от Android. Систему сборки можно настроить для использования этого шаблона, добавив следующий XML-код в файл проекта приложения .NET MAUI (CSPROJ) в качестве дочерних <Project>
элементов узла:
<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
<Compile Remove="**\Android\**\*.cs" />
<None Include="**\Android\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\MaciOS\**\*.cs" />
<None Include="**\MaciOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
<Compile Remove="**\iOS\**\*.cs" />
<None Include="**\iOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\MacCatalyst\**\*.cs" />
<None Include="**\MacCatalyst\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
<Compile Remove="**\Windows\**\*.cs" />
<None Include="**\Windows\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
Этот XML-код настраивает систему сборки для удаления шаблонов папок на основе платформы в определенных условиях:
- Не компилируйте код C#, расположенный в папке Android или вложенной папке папки Android , если вы не создаете сборку для Android.
- Не компилируйте код C#, расположенный в папке MaciOS или вложенной папке папки MaciOS , если вы не создаете сборку для iOS и Mac Catalyst.
- Не компилируйте код C#, расположенный в папке iOS или вложенной папке папки iOS, если вы не используете сборку для iOS .
- Не компилируйте код C#, расположенный в папке MacCatalyst , или вложенную папку папки MacCatalyst , если вы не создаете сборку для Mac Catalyst.
- Не компилируйте код C#, расположенный в папке Windows или вложенной папке папки Windows , если вы не создаете сборку для Windows.
Важно!
Мультинацеливание на основе папок можно объединить с многонацелевой ориентацией на основе файлов. Дополнительные сведения см. в разделе "Объединение имен файлов и папок с несколькими целевыми объектами".
Объединение имен файлов и папок с несколькими целевыми объектами
Многонацелие на основе файлов можно сочетать с многонацелевой ориентацией на основе папок, если это необходимо. Систему сборки можно настроить для использования этого шаблона, добавив следующий XML-код в файл проекта приложения .NET MAUI (CSPROJ) в качестве дочерних <Project>
элементов узла:
<!-- Android -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-android')) != true">
<Compile Remove="**\*.Android.cs" />
<None Include="**\*.Android.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Android\**\*.cs" />
<None Include="**\Android\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Both iOS and Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true AND $(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\*.MaciOS.cs" />
<None Include="**\*.MaciOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\MaciOS\**\*.cs" />
<None Include="**\MaciOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- iOS -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-ios')) != true">
<Compile Remove="**\*.iOS.cs" />
<None Include="**\*.iOS.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\iOS\**\*.cs" />
<None Include="**\iOS\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Mac Catalyst -->
<ItemGroup Condition="$(TargetFramework.StartsWith('net8.0-maccatalyst')) != true">
<Compile Remove="**\*.MacCatalyst.cs" />
<None Include="**\*.MacCatalyst.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\MacCatalyst\**\*.cs" />
<None Include="**\MacCatalyst\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
<!-- Windows -->
<ItemGroup Condition="$(TargetFramework.Contains('-windows')) != true">
<Compile Remove="**\*.Windows.cs" />
<None Include="**\*.Windows.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
<Compile Remove="**\Windows\**\*.cs" />
<None Include="**\Windows\**\*.cs" Exclude="$(DefaultItemExcludes);$(DefaultExcludesInProjectFolder)" />
</ItemGroup>
Этот XML-код настраивает систему сборки для удаления шаблонов файлов и папок на основе платформы в определенных условиях:
- Не компилируйте код C#, имя файла которого заканчивается . Android.cs или находится в папке Android или вложенной папке в папке Android , если вы не создаете сборку для Android.
- Не компилируйте код C#, имя файла которого заканчивается . MaciOS.cs или находится в папке MaciOS или вложенной папке папки MaciOS , если вы не создаете сборку для iOS и Mac Catalyst.
- Не компилируйте код C#, имя файла которого заканчивается на .iOS.cs или находится в папке iOS или вложенной папке папки iOS , если вы не создаете для iOS.
- Не компилируйте код C#, имя файла которого заканчивается . Файл MacCatalyst.cs или находится в папке MacCatalyst или вложенной папке папки MacCatalyst , если вы не создаете сборку для Mac Catalyst.
- Не компилируйте код C#, имя файла которого заканчивается . Файл Windows.cs или находится в папке Windows или вложенной папке папки Windows , если вы не используете сборку для Windows.