Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,17 @@ private static IEnumerable<string> ResolveInternal(MSBuildVersion? msBuildVersio

var instances = new List<Instance>();

instances.AddRange(
from version in new[] { MSBuildVersion.VS2026 }
from platform in s_platforms
from edition in typeof(VisualStudioEdition).GetEnumValues<VisualStudioEdition>()
// 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
Expand All @@ -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,
Expand Down Expand Up @@ -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"
};
}
Expand Down
1 change: 1 addition & 0 deletions source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ namespace Nuke.Common.Tools.MSBuild;
[PublicAPI]
public enum MSBuildVersion
{
VS2026,
VS2022,
VS2019,
VS2017,
Expand Down