diff --git a/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs b/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs index e8b922310..4f6e1cfb1 100644 --- a/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs +++ b/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs @@ -39,6 +39,17 @@ private static IEnumerable ResolveInternal(MSBuildVersion? msBuildVersio var instances = new List(); + instances.AddRange( + from version in new[] { MSBuildVersion.VS2026 } + from platform in s_platforms + from edition in typeof(VisualStudioEdition).GetEnumValues() + // is this relevant for 2026? + // let folder = version == MSBuildVersion.VS2022 && edition != VisualStudioEdition.BuildTools + // ? SpecialFolders.ProgramFiles + // : SpecialFolders.ProgramFilesX86 + let folder = SpecialFolders.ProgramFiles + select GetFromVs2026Instance(version, platform, edition, folder)); + instances.AddRange( from version in new[] { MSBuildVersion.VS2022, MSBuildVersion.VS2019, MSBuildVersion.VS2017 } from platform in s_platforms @@ -64,6 +75,26 @@ from platform in s_platforms return filteredInstances.Select(x => x.ToolPath); } + + private static Instance GetFromVs2026Instance( + MSBuildVersion version, + MSBuildPlatform platform, + VisualStudioEdition edition, + SpecialFolders specialFolder) + { + // introduce another mapping method? + // var versionDirectoryName = version.ToString().TrimStart("VS"); + var basePath = Path.Combine( + EnvironmentInfo.SpecialFolder(specialFolder).NotNull(), + $@"Microsoft Visual Studio\18\{edition}\MSBuild\{GetVersionFolder(version)}\Bin"); + + return new Instance( + version, + platform, + platform == MSBuildPlatform.x64 + ? Path.Combine(basePath, "amd64") + : basePath); + } private static Instance GetFromVs2017Instance( MSBuildVersion version, @@ -105,6 +136,9 @@ private static string GetVersionFolder(MSBuildVersion version) MSBuildVersion.VS2013 => "12.0", MSBuildVersion.VS2015 => "14.0", MSBuildVersion.VS2017 => "15.0", + // correct? + MSBuildVersion.VS2019 => "16.0", + MSBuildVersion.VS2022 => "17.0", _ => "Current" }; } diff --git a/source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs b/source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs index d15895053..e7bc4f981 100644 --- a/source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs +++ b/source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs @@ -15,6 +15,7 @@ namespace Nuke.Common.Tools.MSBuild; [PublicAPI] public enum MSBuildVersion { + VS2026, VS2022, VS2019, VS2017,