設定多重目標

.NET 多平臺應用程式 UI (.NET MAUI) 應用程式使用多重目標,從單一專案以多個平臺為目標。

.NET MAUI 應用程式的專案包含 Platform 資料夾,每個子資料夾都代表 .NET MAUI 可以鎖定的平臺:

平臺資料夾螢幕擷取畫面。

每個目標平臺的資料夾都包含平臺特定程式碼,這些程式碼會在每個平臺上啟動應用程式,以及您新增的任何其他平臺程式碼。 在建置階段,建置系統只會在針對該特定平臺建置時,包含來自每個資料夾的程式碼。 例如,當您建置 Android 時,[平臺>Android] 資料夾中的檔案會內建到應用程式套件中,但其他[平臺] 資料夾中的檔案將不會是 。

除了這個預設多重目標方法之外,.NET MAUI 應用程式也可以根據您自己的檔案名和資料夾準則來多重目標。 這可讓您建構 .NET MAUI 應用程式專案,讓您不需要將平臺程式碼放入 [平臺 ] 資料夾的子資料夾中。

設定檔案名型多重目標

標準多重目標模式是在平臺程式碼的檔案名中包含平臺作為副檔名。 例如, MyService.Android.cs 代表 類別的 Android 特定實作 MyService 。 建置系統可以藉由將下列 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.cs。
  • 請勿編譯檔案名結尾為 的 C# 程式碼 。MaciOS.cs,如果您不是針對 iOS 和 Mac Bolt 建置。
  • 如果您不是針對 iOS 建置,請勿編譯檔案名結尾為 .iOS.cs的 C# 程式碼。
  • 請勿編譯檔案名結尾為 的 C# 程式碼 。如果您不是為 MacCatalyst.cs 建置,則為 MacCatalyst.cs
  • 請勿編譯檔案名結尾為 的 C# 程式碼 。如果您不是針對 Windows 建置,則為 Windows.cs。

重要

檔案名型多重目標可以與資料夾型多重目標結合。 如需詳細資訊,請參閱 合併檔案名和資料夾多重目標

設定資料夾型多重目標

另一個標準多重目標模式是將平臺納入為資料夾名稱。 例如,名為 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 會設定建置系統,以在特定情況下移除平臺型資料夾模式:

  • 如果您不是針對 Android 建置,請勿編譯位於 Android 資料夾或 Android 資料夾子資料夾中的 C# 程式碼。
  • 如果您不是針對 iOS 和 MacCat 建置,請勿編譯位於 MaciOS 資料夾或 MaciOS 資料夾子資料夾中的 C# 程式碼。
  • 如果您不是針對 iOS 建置,請勿編譯位於 iOS 資料夾或 iOS 資料夾子資料夾中的 C# 程式碼。
  • 如果您不是為MacCatalyst資料夾建置,請勿編譯位於MacCatalyst 資料夾或 MacCatalyst資料夾的子資料夾中的 C# 程式碼。
  • 如果您不是針對 Windows 建置,請勿編譯位於 Windows 資料夾或 Windows 資料夾子資料夾中的 C# 程式碼。

重要

資料夾型多重目標可以與檔案名型多重目標結合。 如需詳細資訊,請參閱 合併檔案名和資料夾多重目標

合併檔案名和資料夾多重目標

如有需要,檔案名型多重目標可以與資料夾型多重目標結合。 建置系統可以藉由將下列 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 建置,則 Android.cs 或位於Android資料夾的Android資料夾或子資料夾中。
  • 請勿編譯檔案名結尾為 的 C# 程式碼 如果您不是針對 iOS 和 MacCats 建置,則 MaciOS.cs 或位於 MaciOS 資料夾的 MaciOS 資料夾或子資料夾中。
  • 如果您不是針對 iOS 建置,請勿編譯檔案名結尾為 .iOS.cs的 C# 程式碼,或位於 iOS 資料夾的 iOS 資料夾或子資料夾中。
  • 請勿編譯檔案名結尾為 的 C# 程式碼。如果您不是為 MacCatalyst 資料夾建置,則 MacCatalyst.cs 或位於MacCatalyst 資料夾的 MacCatalyst資料夾或子資料夾中。
  • 請勿編譯檔案名結尾為 的 C# 程式碼 。如果您不是針對 Windows 建置,則 Windows.cs 或位於 Windows 資料夾的 Windows 資料夾或子資料夾中。