-
Notifications
You must be signed in to change notification settings - Fork 293
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #942 from CommunityToolkit/dev/windows-sdk-validation
Add .targets to validate the Windows SDK version
- Loading branch information
1 parent
a51c5ca
commit 3c7ef2f
Showing
3 changed files
with
81 additions
and
0 deletions.
There are no files selected for viewing
77 changes: 77 additions & 0 deletions
77
src/CommunityToolkit.Mvvm/CommunityToolkit.Mvvm.WindowsSdk.targets
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
<Project> | ||
|
||
<PropertyGroup> | ||
|
||
<!-- Verification of the Windows SDK package version is enabled by default--> | ||
<MvvmToolkitEnableWindowsSdkPackageVersionValidation Condition="'$(MvvmToolkitEnableWindowsSdkPackageVersionValidation)' == ''">true</MvvmToolkitEnableWindowsSdkPackageVersionValidation> | ||
|
||
<!-- | ||
Wired up the Windows SDK package version verification target, if enabled. | ||
This only applies to TFMs targeting Windows 10 or later. | ||
--> | ||
<ResolveReferencesDependsOn Condition="'$(MSBuildProjectExtension)' == '.csproj' AND | ||
'$(MvvmToolkitVerifyWindowsSdkPackageVersion)' != 'false' AND | ||
'$(MvvmToolkitEnableWindowsSdkPackageVersionValidation)' != 'false' AND | ||
$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0-windows10.0.17763.0'))"> | ||
$(ResolveReferencesDependsOn);MvvmToolkitVerifyWindowsSdkPackageVersion | ||
</ResolveReferencesDependsOn> | ||
</PropertyGroup> | ||
|
||
<!-- Custom target to verify the Windows SDK package version --> | ||
<Target Name="MvvmToolkitVerifyWindowsSdkPackageVersion" DependsOnTargets="ResolveAssemblyReferences"> | ||
<PropertyGroup> | ||
|
||
<!-- | ||
The minimum build versions for the Windows SDK package. We keep track of up to 3 different versions: | ||
- The minimum Windows SDK package for which we don't want to emit a build error. | ||
- The recommended Windows SDK package for UWP projects using the .NET 9 SDK (with UWP XAML projections). | ||
- The recommended Windows SDK package for WindowsAppSDK projects (ie. without UWP XAML projections). | ||
--> | ||
<_MvvmToolkitWindowsSdkPackageMinBuild>38</_MvvmToolkitWindowsSdkPackageMinBuild> | ||
<_MvvmToolkitWindowsSdkPackageRecommendedUwpBuild>39</_MvvmToolkitWindowsSdkPackageRecommendedUwpBuild> | ||
<_MvvmToolkitWindowsSdkPackageRecommendedWindowsAppSDKBuild>41</_MvvmToolkitWindowsSdkPackageRecommendedWindowsAppSDKBuild> | ||
|
||
<!-- Switch on the recommended one based on configuration --> | ||
<_MvvmToolkitWindowsSdkPackageRecommendedBuild>$(_MvvmToolkitWindowsSdkPackageMinBuild)</_MvvmToolkitWindowsSdkPackageRecommendedBuild> | ||
<_MvvmToolkitWindowsSdkPackageRecommendedBuild Condition="'$(UseUwp)' == 'true'">$(_MvvmToolkitWindowsSdkPackageRecommendedUwpBuild)</_MvvmToolkitWindowsSdkPackageRecommendedBuild> | ||
<_MvvmToolkitWindowsSdkPackageRecommendedBuild Condition="'$(UseUwp)' != 'true'">$(_MvvmToolkitWindowsSdkPackageRecommendedWindowsAppSDKBuild)</_MvvmToolkitWindowsSdkPackageRecommendedBuild> | ||
</PropertyGroup> | ||
<ItemGroup> | ||
|
||
<!-- If 'WindowsSdkPackageVersion' is explicitly set, validate against that --> | ||
<_MvvmToolkitWindowsSdkPackage Include="$(WindowsSdkPackageVersion)" Condition="'$(WindowsSdkPackageVersion)' != ''"> | ||
<Referenced>$(WindowsSdkPackageVersion)</Referenced> | ||
<Required>10.0.$([System.Version]::Parse("$(WindowsSdkPackageVersion.Split('-')[0])").Build).$(_MvvmToolkitWindowsSdkPackageMinBuild)</Required> | ||
<Recommended>10.0.$([System.Version]::Parse("$(WindowsSdkPackageVersion.Split('-')[0])").Build).$(_MvvmToolkitWindowsSdkPackageRecommendedBuild)</Recommended> | ||
</_MvvmToolkitWindowsSdkPackage> | ||
|
||
<!-- Otherwise, validate against the framework reference package --> | ||
<_MvvmToolkitWindowsSdkPackage | ||
Include="@(ResolvedFrameworkReference)" | ||
Condition="'$(WindowsSdkPackageVersion)' == '' AND '@(ResolvedFrameworkReference)' != '' AND '%(Identity)' == 'Microsoft.Windows.SDK.NET.Ref'"> | ||
<Referenced>%(ResolvedFrameworkReference.TargetingPackVersion)</Referenced> | ||
<Required>10.0.$([System.Version]::Parse("%(ResolvedFrameworkReference.TargetingPackVersion)").Build).$(_MvvmToolkitWindowsSdkPackageMinBuild)</Required> | ||
<Recommended>10.0.$([System.Version]::Parse("%(ResolvedFrameworkReference.TargetingPackVersion)").Build).$(_MvvmToolkitWindowsSdkPackageRecommendedBuild)</Recommended> | ||
</_MvvmToolkitWindowsSdkPackage> | ||
|
||
<!-- Check whether the referenced Windows SDK package is compatible --> | ||
<_MvvmToolkitCompatibleWindowsSdkPackages | ||
Include="@(_MvvmToolkitWindowsSdkPackage)" | ||
Condition="'@(_MvvmToolkitWindowsSdkPackage)' != '' AND $([MSBuild]::VersionGreaterThanOrEquals(%(Referenced), %(Required)))" /> | ||
</ItemGroup> | ||
<PropertyGroup> | ||
|
||
<!-- Extract the required and recommended Windows SDK package version (to show if the one in use is not compatible) --> | ||
<_MvvmToolkitWindowsSdkPackageRequired>@(_MvvmToolkitWindowsSdkPackage->'%(Required)')</_MvvmToolkitWindowsSdkPackageRequired> | ||
<_MvvmToolkitWindowsSdkPackageRecommended>@(_MvvmToolkitWindowsSdkPackage->'%(Recommended)')</_MvvmToolkitWindowsSdkPackageRecommended> | ||
</PropertyGroup> | ||
|
||
<!-- Emit an error if the Windows SDK package version isn't valid --> | ||
<Error | ||
Condition="'@(_MvvmToolkitCompatibleWindowsSdkPackages)' == ''" | ||
Code="MVVMTKCFG0003" | ||
HelpLink="https://aka.ms/mvvmtoolkit/errors/mvvmtkcfg0003" | ||
Text="This version of the MVVM Toolkit requires 'Microsoft.Windows.SDK.NET.Ref' version '$(_MvvmToolkitWindowsSdkPackageRequired)' or later. Please update to .NET SDK 8.0.109, 8.0.305 or 8.0.402 (or later). Alternatively, use a temporary 'Microsoft.Windows.SDK.NET.Ref' reference, which can be done by setting the 'WindowsSdkPackageVersion' property in your .csproj file. For your project configuration, it is recommended to set the package version to '$(_MvvmToolkitWindowsSdkPackageRecommended)'." /> | ||
</Target> | ||
|
||
</Project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters