Skip to content

Commit 5a12e3d

Browse files
authored
Merge pull request #237 from CommunityToolkit/multitarget/enabled-targetframework-overrides
Rewired "Available" vs "Enabled" MultiTargets and TargetFrameworks
2 parents 83dff9f + 2929e6d commit 5a12e3d

20 files changed

+137
-169
lines changed

Build-Toolkit-Components.ps1

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ Param (
9595
[switch]$Verbose
9696
)
9797

98+
# Use the specified MultiTarget TFM and WinUI version
99+
& $PSScriptRoot\MultiTarget\UseUnoWinUI.ps1 $WinUIMajorVersion
100+
& $PSScriptRoot\MultiTarget\UseTargetFrameworks.ps1 -MultiTargets $MultiTargets -ExcludeMultiTargets $ExcludeMultiTargets
101+
98102
if ($MultiTargets -eq 'all') {
99103
$MultiTargets = @('wasm', 'uwp', 'wasdk', 'wpf', 'linuxgtk', 'macos', 'ios', 'android', 'netstandard')
100104
}
@@ -128,10 +132,6 @@ if ($ExcludeComponents) {
128132
$Components = $Components | Where-Object { $_ -notin $ExcludeComponents }
129133
}
130134

131-
# Use the specified MultiTarget TFM and WinUI version
132-
& $PSScriptRoot\MultiTarget\UseTargetFrameworks.ps1 $MultiTargets
133-
& $PSScriptRoot\MultiTarget\UseUnoWinUI.ps1 $WinUIMajorVersion
134-
135135
function Invoke-MSBuildWithBinlog {
136136
param (
137137
[string]$TargetHeadPath
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project>
2+
<!-- Imports the <MultiTarget> values for the current project. -->
3+
<PropertyGroup>
4+
<MultiTargetIsSampleProject Condition="$(MSBuildProjectName.EndsWith('.Samples')) == 'true'">true</MultiTargetIsSampleProject>
5+
</PropertyGroup>
6+
7+
<Import Project="$(MSBuildProjectDirectory)\MultiTarget.props" Condition="Exists('$(MSBuildProjectDirectory)\MultiTarget.props') AND '$(MultiTarget)' == ''" />
8+
9+
<!-- If in a sample project, pull the MultiTarget settings from the source project. -->
10+
<!-- This behavior is also implemented in GeneratedAllProjectReferences.ps1 for <ProjectReference> generation. -->
11+
<Import Project="$(MSBuildProjectDirectory)/../src/MultiTarget.props" Condition="$(MultiTargetIsSampleProject) == 'true' AND !Exists('$(MSBuildProjectDirectory)\MultiTarget.props') AND Exists('$(MSBuildProjectDirectory)/../src/MultiTarget.props') AND '$(MultiTarget)' == ''" />
12+
13+
<Import Project="$(MSBuildThisFileDirectory)\Defaults.props" Condition="'$(MultiTarget)' == ''" />
14+
15+
<PropertyGroup>
16+
<AvailableMultiTargets>$(AvailableMultiTargets);$(MultiTarget)</AvailableMultiTargets>
17+
</PropertyGroup>
18+
</Project>

MultiTarget/AvailableTargetFrameworks.props

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,29 @@
11
<Project>
2+
<!--
3+
Defines the TargetFrameworks available to each MultiTarget.
4+
Can be overridden by the user to enable / disable individual TargetFramworks per MultiTarget.
5+
Does not define the EnabledTargetFrameworks, which are used to build the project.
6+
-->
27
<PropertyGroup>
38
<!-- See https://github.com/CommunityToolkit/Tooling-Windows-Submodule/pull/235#issuecomment-2530131559 -->
4-
<UwpTargetFramework Condition="'$(UwpTargetFramework)' == '' AND '$(BuildingInsideVisualStudio)' == 'true'">uap10.0.17763;</UwpTargetFramework>
5-
<UwpTargetFramework Condition="'$(UwpTargetFramework)' == '' AND '$(BuildingInsideVisualStudio)' != 'true'">uap10.0.17763;net8.0-windows10.0.26100.0;</UwpTargetFramework>
6-
<WinAppSdkTargetFramework Condition="'$(WinAppSdkTargetFramework)' == ''">net9.0-windows10.0.19041.0;net8.0-windows10.0.19041.0;</WinAppSdkTargetFramework>
9+
<UwpTargetFrameworks Condition="'$(UwpTargetFrameworks)' == '' AND '$(BuildingInsideVisualStudio)' == 'true'">uap10.0.17763;</UwpTargetFrameworks>
10+
11+
<!-- We also include 'net9.0-windows10.0.26100.0' explicitly for UWP as a workaround for https://github.com/CommunityToolkit/Tooling-Windows-Submodule/issues/238 -->
12+
<UwpTargetFrameworks Condition="'$(UwpTargetFrameworks)' == '' AND '$(BuildingInsideVisualStudio)' != 'true'">uap10.0.17763;net8.0-windows10.0.26100.0;net9.0-windows10.0.26100.0;</UwpTargetFrameworks>
13+
<WinAppSdkTargetFrameworks Condition="'$(WinAppSdkTargetFrameworks)' == ''">net9.0-windows10.0.19041.0;net8.0-windows10.0.19041.0;</WinAppSdkTargetFrameworks>
714

815
<WasmHeadTargetFramework Condition="'$(WasmHeadTargetFramework)' == ''">net9.0;</WasmHeadTargetFramework>
916
<LinuxHeadTargetFramework Condition="'$(LinuxHeadTargetFramework)' == ''">net9.0;</LinuxHeadTargetFramework>
1017
<WpfHeadTargetFramework Condition="'$(WpfHeadTargetFramework)' == ''">net9.0;</WpfHeadTargetFramework>
1118

12-
<AndroidLibTargetFramework Condition="'$(AndroidLibTargetFramework)' == ''">net9.0-android;</AndroidLibTargetFramework>
13-
<MacOSLibTargetFramework Condition="'$(MacOSLibTargetFramework)' == ''">net9.0-maccatalyst;</MacOSLibTargetFramework>
14-
<iOSLibTargetFramework Condition="'$(iOSLibTargetFramework)' == ''">net9.0-ios;</iOSLibTargetFramework>
19+
<AndroidLibTargetFrameworks Condition="'$(AndroidLibTargetFrameworks)' == ''">net9.0-android;</AndroidLibTargetFrameworks>
20+
<MacOSLibTargetFrameworks Condition="'$(MacOSLibTargetFrameworks)' == ''">net9.0-maccatalyst;</MacOSLibTargetFrameworks>
21+
<iOSLibTargetFrameworks Condition="'$(iOSLibTargetFrameworks)' == ''">net9.0-ios;</iOSLibTargetFrameworks>
1522

1623
<!-- Used for comparison to current TargetFramework -->
17-
<LinuxLibTargetFramework Condition="'$(LinuxLibTargetFramework)' == ''">net9.0;</LinuxLibTargetFramework>
18-
<WasmLibTargetFramework Condition="'$(WasmLibTargetFramework)' == ''">net9.0;</WasmLibTargetFramework>
19-
<WpfLibTargetFramework Condition="'$(WpfLibTargetFramework)' == ''">net9.0;</WpfLibTargetFramework>
24+
<LinuxLibTargetFrameworks Condition="'$(LinuxLibTargetFrameworks)' == ''">net9.0;</LinuxLibTargetFrameworks>
25+
<WasmLibTargetFrameworks Condition="'$(WasmLibTargetFrameworks)' == ''">net9.0;</WasmLibTargetFrameworks>
26+
<WpfLibTargetFrameworks Condition="'$(WpfLibTargetFrameworks)' == ''">net9.0;</WpfLibTargetFrameworks>
2027

2128
<!-- Used for defining TargetFramework under platforms that need it -->
2229
<DotnetStandardCommonTargetFramework Condition="'$(DotnetStandardCommonTargetFramework)' == ''">netstandard2.0</DotnetStandardCommonTargetFramework>

MultiTarget/EnabledMultiTargets.props

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,7 @@
1-
<!-- Imports the <MultiTarget> values for the current project. -->
21
<Project>
2+
<!--Indicates which MultiTargets are enabled via UseTargetFrameworks script. -->
3+
<!-- Do not commit changes made to default values by tooling. -->
34
<PropertyGroup>
4-
<MultiTargetIsSampleProject Condition="$(MSBuildProjectName.EndsWith('.Samples')) == 'true'">true</MultiTargetIsSampleProject>
5+
<EnabledMultiTargets>wasm;uwp;netstandard</EnabledMultiTargets>
56
</PropertyGroup>
6-
7-
<Import Project="$(MSBuildProjectDirectory)\MultiTarget.props" Condition="Exists('$(MSBuildProjectDirectory)\MultiTarget.props') AND '$(MultiTarget)' == ''" />
8-
9-
<!-- If in a sample project, pull the MultiTarget settings from the source project. -->
10-
<!-- This behavior is also implemented in GeneratedAllProjectReferences.ps1 for <ProjectReference> generation. -->
11-
<Import Project="$(MSBuildProjectDirectory)/../src/MultiTarget.props" Condition="$(MultiTargetIsSampleProject) == 'true' AND !Exists('$(MSBuildProjectDirectory)\MultiTarget.props') AND Exists('$(MSBuildProjectDirectory)/../src/MultiTarget.props') AND '$(MultiTarget)' == ''" />
12-
13-
<Import Project="$(MSBuildThisFileDirectory)\Defaults.props" Condition="'$(MultiTarget)' == ''" />
147
</Project>
Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,26 @@
1-
<Project>
2-
<PropertyGroup>
3-
<!-- See https://github.com/CommunityToolkit/Tooling-Windows-Submodule/pull/235#issuecomment-2530131559 -->
4-
<UwpTargetFramework Condition="'$(UwpTargetFramework)' == '' AND '$(BuildingInsideVisualStudio)' == 'true'">uap10.0.17763;</UwpTargetFramework>
5-
<UwpTargetFramework Condition="'$(UwpTargetFramework)' == '' AND '$(BuildingInsideVisualStudio)' != 'true'">uap10.0.17763;net8.0-windows10.0.26100.0;</UwpTargetFramework>
6-
7-
8-
<WasmHeadTargetFramework Condition="'$(WasmHeadTargetFramework)' == ''">net9.0;</WasmHeadTargetFramework>
9-
<LinuxHeadTargetFramework Condition="'$(LinuxHeadTargetFramework)' == ''">net9.0;</LinuxHeadTargetFramework>
10-
<WpfHeadTargetFramework Condition="'$(WpfHeadTargetFramework)' == ''">net9.0;</WpfHeadTargetFramework>
11-
12-
13-
14-
1+
<Project>
2+
<PropertyGroup>
3+
<!--
4+
MultiTarget is a custom property that indicates which target a project is designed to be built for / run on.
5+
Used to create project references, generate solution files, enable/disable TargetFrameworks, and build nuget packages.
6+
AvailableMultiTargets is a list of all possible MultiTargets that a project can be built for.
7+
EnabledMultiTargets is an exclusive list of MultiTargets that should be built, and can be customized by the user via global property.
8+
-->
9+
<TargetFrameworks Condition="$(EnabledMultiTargets.Contains('uwp')) == 'true' AND $(AvailableMultiTargets.Contains('uwp')) == 'true'">$(TargetFrameworks);$(UwpTargetFrameworks)</TargetFrameworks>
10+
<TargetFrameworks Condition="$(EnabledMultiTargets.Contains('wasdk')) == 'true' AND $(AvailableMultiTargets.Contains('wasdk')) == 'true'">$(TargetFrameworks);$(WinAppSdkTargetFrameworks)</TargetFrameworks>
1511

16-
<!-- Used for comparison to current TargetFramework -->
17-
<LinuxLibTargetFramework Condition="'$(LinuxLibTargetFramework)' == ''">net9.0;</LinuxLibTargetFramework>
18-
<WasmLibTargetFramework Condition="'$(WasmLibTargetFramework)' == ''">net9.0;</WasmLibTargetFramework>
19-
<WpfLibTargetFramework Condition="'$(WpfLibTargetFramework)' == ''">net9.0;</WpfLibTargetFramework>
12+
<!--
13+
TargetFrameworks for WasmLibTargetFrameworks, WpfLibTargetFrameworks, and LinuxLibTargetFrameworks all use the same value.
14+
Duplicate values can't be removed during the evaluation phase without breaking things, so we use a single value for all that need it.
15+
-->
16+
<IsNetCommonMultiTargetEnabled Condition="$(EnabledMultiTargets.Contains('wasm')) == 'true' OR $(EnabledMultiTargets.Contains('wpf')) == 'true' OR $(EnabledMultiTargets.Contains('linuxgtk')) == 'true'">true</IsNetCommonMultiTargetEnabled>
17+
<IsNetCommonMultiTargetAvailable Condition="$(AvailableMultiTargets.Contains('wasm')) == 'true' OR $(AvailableMultiTargets.Contains('wpf')) == 'true' OR $(AvailableMultiTargets.Contains('linuxgtk')) == 'true'">true</IsNetCommonMultiTargetAvailable>
18+
<TargetFrameworks Condition="$(IsNetCommonMultiTargetEnabled) == 'true' AND $(IsNetCommonMultiTargetAvailable) == 'true'">$(TargetFrameworks);$(DotnetCommonTargetFramework)</TargetFrameworks>
2019

21-
<!-- Used for defining TargetFramework under platforms that need it -->
22-
<DotnetStandardCommonTargetFramework Condition="'$(DotnetStandardCommonTargetFramework)' == ''">netstandard2.0</DotnetStandardCommonTargetFramework>
23-
<DotnetCommonTargetFramework Condition="'$(DotnetCommonTargetFramework)' == ''">net9.0;</DotnetCommonTargetFramework>
24-
</PropertyGroup>
20+
<TargetFrameworks Condition="$(EnabledMultiTargets.Contains('macos')) == 'true' AND $(AvailableMultiTargets.Contains('macos')) == 'true'">$(TargetFrameworks);$(MacOSLibTargetFrameworks)</TargetFrameworks>
21+
<TargetFrameworks Condition="$(EnabledMultiTargets.Contains('ios')) == 'true' AND $(AvailableMultiTargets.Contains('ios')) == 'true'">$(TargetFrameworks);$(iOSLibTargetFrameworks)</TargetFrameworks>
22+
<TargetFrameworks Condition="$(EnabledMultiTargets.Contains('android')) == 'true' AND $(AvailableMultiTargets.Contains('android')) == 'true'">$(TargetFrameworks);$(AndroidLibTargetFrameworks)</TargetFrameworks>
23+
24+
<TargetFrameworks Condition="$(EnabledMultiTargets.Contains('netstandard')) == 'true' AND $(AvailableMultiTargets.Contains('netstandard')) == 'true'">$(TargetFrameworks);$(DotnetStandardCommonTargetFramework)</TargetFrameworks>
25+
</PropertyGroup>
2526
</Project>

MultiTarget/Library.props

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
<IsDeployableHead>false</IsDeployableHead>
66
</PropertyGroup>
77

8-
<!-- Get the enabled MultiTarget features for this project / run -->
8+
<!-- Get this project's declared (available to enable) MultiTargets -->
9+
<!-- Use <MultiTarget> values to define <TargetFrameworks> -->
10+
<Import Project="$(ToolingDirectory)\MultiTarget\AvailableTargetFrameworks.props" />
11+
<Import Project="$(ToolingDirectory)\MultiTarget\AvailableMultiTargets.props" />
912
<Import Project="$(ToolingDirectory)\MultiTarget\EnabledMultiTargets.props" />
1013
<Import Project="$(ToolingDirectory)\MultiTarget\EnabledTargetFrameworks.props" />
11-
<Import Project="$(ToolingDirectory)\MultiTarget\WinUI.TargetVersion.props" />
1214

13-
<!-- Use <MultiTarget> values to define <TargetFrameworks> -->
14-
<Import Project="$(ToolingDirectory)\MultiTarget\MultiTargetToTargetFramework.props" />
15+
<Import Project="$(ToolingDirectory)\MultiTarget\WinUI.TargetVersion.props" />
1516

1617
<!-- Enable project identifiers -->
1718
<Import Project="$(ToolingDirectory)\MultiTarget\MultiTargetIdentifiers.props" />

MultiTarget/MultiTargetIdentifiers.props

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,36 +19,36 @@
1919
</PropertyGroup>
2020

2121
<PropertyGroup>
22-
<MultiTargetsWasm Condition="$(MultiTarget.Contains('wasm')) == 'true'">true</MultiTargetsWasm>
23-
<MultiTargetsWpf Condition="$(MultiTarget.Contains('wpf')) == 'true'">true</MultiTargetsWpf>
24-
<MultiTargetsLinuxGtk Condition="$(MultiTarget.Contains('linuxgtk')) == 'true'">true</MultiTargetsLinuxGtk>
25-
<MultiTargetsDroid Condition="$(MultiTarget.Contains('android')) == 'true'">true</MultiTargetsDroid>
26-
<MultiTargetsMacOS Condition="$(MultiTarget.Contains('macos')) == 'true'">true</MultiTargetsMacOS>
27-
<MultiTargetsiOS Condition="$(MultiTarget.Contains('ios')) == 'true'">true</MultiTargetsiOS>
28-
<MultiTargetsUwp Condition="$(MultiTarget.Contains('uwp')) == 'true'">true</MultiTargetsUwp>
29-
<MultiTargetsWasdk Condition="$(MultiTarget.Contains('wasdk')) == 'true'">true</MultiTargetsWasdk>
30-
<MultiTargetsNetstandard Condition="$(MultiTarget.Contains('netstandard')) == 'true'">true</MultiTargetsNetstandard>
22+
<MultiTargetsWasm Condition="$(AvailableMultiTargets.Contains('wasm')) == 'true'">true</MultiTargetsWasm>
23+
<MultiTargetsWpf Condition="$(AvailableMultiTargets.Contains('wpf')) == 'true'">true</MultiTargetsWpf>
24+
<MultiTargetsLinuxGtk Condition="$(AvailableMultiTargets.Contains('linuxgtk')) == 'true'">true</MultiTargetsLinuxGtk>
25+
<MultiTargetsDroid Condition="$(AvailableMultiTargets.Contains('android')) == 'true'">true</MultiTargetsDroid>
26+
<MultiTargetsMacOS Condition="$(AvailableMultiTargets.Contains('macos')) == 'true'">true</MultiTargetsMacOS>
27+
<MultiTargetsiOS Condition="$(AvailableMultiTargets.Contains('ios')) == 'true'">true</MultiTargetsiOS>
28+
<MultiTargetsUwp Condition="$(AvailableMultiTargets.Contains('uwp')) == 'true'">true</MultiTargetsUwp>
29+
<MultiTargetsWasdk Condition="$(AvailableMultiTargets.Contains('wasdk')) == 'true'">true</MultiTargetsWasdk>
30+
<MultiTargetsNetstandard Condition="$(AvailableMultiTargets.Contains('netstandard')) == 'true'">true</MultiTargetsNetstandard>
3131

3232
<IsWasmHead Condition="$(IsDeployableHead) == 'true' AND '$(IsWasmHead)' == '' AND $(WasmHeadTargetFramework.Contains('$(TargetFramework);')) AND '$(WasmHeadTargetFramework)' != ''">true</IsWasmHead>
33-
<IsWasmLib Condition="'$(IsWasmLib)' == '' AND $(WasmHeadTargetFramework.Contains('$(TargetFramework);')) AND '$(MultiTargetsWasm)' == 'true' AND '$(WasmLibTargetFramework)' != ''">true</IsWasmLib>
33+
<IsWasmLib Condition="'$(IsWasmLib)' == '' AND $(WasmHeadTargetFramework.Contains('$(TargetFramework);')) AND '$(MultiTargetsWasm)' == 'true' AND '$(WasmLibTargetFrameworks)' != ''">true</IsWasmLib>
3434
<IsWasm Condition="'$(IsWasm)' == '' AND ('$(IsWasmHead)' == 'true' or '$(IsWasmLib)' == 'true')">true</IsWasm>
3535

3636
<IsWpfHead Condition="$(IsDeployableHead) == 'true' AND '$(IsWpfHead)' == '' AND $(WpfHeadTargetFramework.Contains('$(TargetFramework);')) AND '$(WpfHeadTargetFramework)' != ''">true</IsWpfHead>
37-
<IsWpfLib Condition="'$(IsWpfLib)' == '' AND $(WpfLibTargetFramework.Contains('$(TargetFramework);')) AND '$(WpfLibTargetFramework)' != '' AND '$(MultiTargetsWpf)' == 'true'">true</IsWpfLib>
37+
<IsWpfLib Condition="'$(IsWpfLib)' == '' AND $(WpfLibTargetFrameworks.Contains('$(TargetFramework);')) AND '$(WpfLibTargetFrameworks)' != '' AND '$(MultiTargetsWpf)' == 'true'">true</IsWpfLib>
3838
<IsWpf Condition="'$(IsWpf)' == '' AND ('$(IsWpfHead)' == 'true' or '$(IsWpfLib)' == 'true')">true</IsWpf>
3939

4040
<IsGtkHead Condition="$(IsDeployableHead) == 'true' AND '$(IsGtkHead)' == '' AND $(LinuxHeadTargetFramework.Contains('$(TargetFramework);')) AND '$(LinuxHeadTargetFramework)' != ''">true</IsGtkHead>
41-
<IsGtkLib Condition="'$(IsGtkLib)' == '' AND $(LinuxLibTargetFramework.Contains('$(TargetFramework);')) AND '$(LinuxLibTargetFramework)' != '' AND '$(MultiTargetsLinuxGtk)' == 'true'">true</IsGtkLib>
41+
<IsGtkLib Condition="'$(IsGtkLib)' == '' AND $(LinuxLibTargetFrameworks.Contains('$(TargetFramework);')) AND '$(LinuxLibTargetFrameworks)' != '' AND '$(MultiTargetsLinuxGtk)' == 'true'">true</IsGtkLib>
4242
<IsGtk Condition="'$(IsGtk)' == '' AND ('$(IsGtkHead)' == 'true' or '$(IsGtkLib)' == 'true')">true</IsGtk>
4343

44-
<IsUwp Condition="'$(IsUwp)' == '' AND $(UwpTargetFramework.Contains('$(TargetFramework);')) AND '$(UwpTargetFramework)' != '' AND '$(MultiTargetsUwp)' == 'true'">true</IsUwp>
45-
<IsWinAppSdk Condition="'$(IsWinAppSdk)' == '' AND $(WinAppSdkTargetFramework.Contains('$(TargetFramework);')) AND '$(WinAppSdkTargetFramework)' != '' AND '$(MultiTargetsWasdk)' == 'true'">true</IsWinAppSdk>
44+
<IsUwp Condition="'$(IsUwp)' == '' AND $(UwpTargetFrameworks.Contains('$(TargetFramework);')) AND '$(UwpTargetFrameworks)' != '' AND '$(MultiTargetsUwp)' == 'true'">true</IsUwp>
45+
<IsWinAppSdk Condition="'$(IsWinAppSdk)' == '' AND $(WinAppSdkTargetFrameworks.Contains('$(TargetFramework);')) AND '$(WinAppSdkTargetFrameworks)' != '' AND '$(MultiTargetsWasdk)' == 'true'">true</IsWinAppSdk>
4646

4747
<MultiTargetPlatformIdentifier Condition="'$(MultiTargetPlatformIdentifier)' == ''">$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))</MultiTargetPlatformIdentifier>
4848

49-
<IsDroid Condition="'$(IsDroid)' == '' AND $(AndroidLibTargetFramework.Contains('$(TargetFramework);')) AND '$(AndroidLibTargetFramework)' != '' AND '$(MultiTargetsDroid)' == 'true'">true</IsDroid>
50-
<IsMacOS Condition="'$(IsMacOS)' == '' AND $(MacOSLibTargetFramework.Contains('$(TargetFramework);')) AND '$(MacOSLibTargetFramework)' != '' AND '$(MultiTargetsMacOS)' == 'true'">true</IsMacOS>
51-
<IsiOS Condition="'$(IsiOS)' == '' AND $(iOSLibTargetFramework.Contains('$(TargetFramework);')) AND '$(iOSLibTargetFramework)' != '' AND '$(MultiTargetsiOS)' == 'true'">true</IsiOS>
49+
<IsDroid Condition="'$(IsDroid)' == '' AND $(AndroidLibTargetFrameworks.Contains('$(TargetFramework);')) AND '$(AndroidLibTargetFrameworks)' != '' AND '$(MultiTargetsDroid)' == 'true'">true</IsDroid>
50+
<IsMacOS Condition="'$(IsMacOS)' == '' AND $(MacOSLibTargetFrameworks.Contains('$(TargetFramework);')) AND '$(MacOSLibTargetFrameworks)' != '' AND '$(MultiTargetsMacOS)' == 'true'">true</IsMacOS>
51+
<IsiOS Condition="'$(IsiOS)' == '' AND $(iOSLibTargetFrameworks.Contains('$(TargetFramework);')) AND '$(iOSLibTargetFrameworks)' != '' AND '$(MultiTargetsiOS)' == 'true'">true</IsiOS>
5252
<IsNetstandard Condition="'$(IsNetstandard)' == '' AND $(DotnetStandardCommonTargetFramework.Contains('$(TargetFramework);')) AND '$(MultiTargetsNetstandard)' == 'true'">true</IsNetstandard>
5353

5454
<IsUno Condition="'$(IsWasm)' == 'true' OR '$(IsWpf)' == 'true' OR '$(IsGtk)' == 'true' OR '$(IsDroid)' == 'true' OR '$(IsMacOS)' == 'true' OR '$(IsiOS)' == 'true'">true</IsUno>
@@ -64,6 +64,11 @@
6464
<HasWinUI Condition="'$(HasWinUI)' == '' AND '$(WinUIMajorVersion)' == '2' AND '$(HasWinUI2)' == 'false'">false</HasWinUI>
6565
<HasWinUI Condition="'$(HasWinUI)' == '' AND ('$(IsUwp)' == 'true' OR '$(IsWinAppSdk)' == 'true' OR '$(IsUno)' == 'true')">true</HasWinUI>
6666

67-
<UseUwp Condition="'$(HasWinUI)' == 'true' AND '$(IsUwp)' == 'true' AND '$(MultiTargetPlatformIdentifier)' == 'windows'">true</UseUwp>
67+
<!--
68+
The 'UseUwp' property tells the .NET SDK to add a framework reference for the 'Microsoft.Windows.UI.Xaml.dll' assembly, which allows
69+
.NET projects to access UWP XAML types. This is orthogonal to whether WinUI is being used or not. As such, we always set this for
70+
UWP projects that have 'windows' as identifier (i.e. they are not 'UAP' projects, which is legacy UWP), regardless of WinUI.
71+
-->
72+
<UseUwp Condition="'$(IsUwp)' == 'true' AND '$(MultiTargetPlatformIdentifier)' == 'windows'">true</UseUwp>
6873
</PropertyGroup>
6974
</Project>

0 commit comments

Comments
 (0)