Skip to content

Commit c7d5a6d

Browse files
committed
BuildTools: Fix showing Windows SDK versions
1 parent 51518c7 commit c7d5a6d

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

tools/CustomBuildTool/Utils.cs

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -737,7 +737,53 @@ public string GetWindowsSdkVersion()
737737
if (package == null)
738738
return string.Empty;
739739

740-
return package.Id.Substring("Microsoft.VisualStudio.Component.Windows10SDK.".Length);
740+
// SDK
741+
if (package.Id.Length > "Microsoft.VisualStudio.Component.Windows10SDK.".Length)
742+
{
743+
return package.Id.Substring("Microsoft.VisualStudio.Component.Windows10SDK.".Length);
744+
}
745+
else
746+
{
747+
List<string> versions = new List<string>();
748+
749+
var found = this.Packages.FindAll(p =>
750+
{
751+
return p.Id.StartsWith("Microsoft.VisualStudio.Component.Windows10SDK", StringComparison.OrdinalIgnoreCase) ||
752+
p.Id.StartsWith("Microsoft.VisualStudio.Component.Windows11SDK", StringComparison.OrdinalIgnoreCase);
753+
});
754+
755+
// Workaround MSVC bug returning idential version numbers for all packages.
756+
foreach (var sdk in found)
757+
{
758+
string[] tokens = sdk.Id.Split(".", StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
759+
760+
foreach (string name in tokens)
761+
{
762+
if (uint.TryParse(name, out uint version))
763+
{
764+
versions.Add(name);
765+
break;
766+
}
767+
}
768+
}
769+
770+
versions.Sort((p1, p2) =>
771+
{
772+
if (Version.TryParse(p1, out Version v1) && Version.TryParse(p2, out Version v2))
773+
return v1.CompareTo(v2);
774+
else
775+
return 1;
776+
});
777+
778+
if (versions.Count > 0)
779+
{
780+
return versions[^1];
781+
}
782+
else
783+
{
784+
return package.UniqueId;
785+
}
786+
}
741787
}
742788

743789
public string GetWindowsSdkFullVersion()
Binary file not shown.

0 commit comments

Comments
 (0)