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
36 changes: 30 additions & 6 deletions source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,10 @@ private static IEnumerable<string> ResolveInternal(MSBuildVersion? msBuildVersio
var instances = new List<Instance>();

instances.AddRange(
from version in new[] { MSBuildVersion.VS2022, MSBuildVersion.VS2019, MSBuildVersion.VS2017 }
from version in new[] { MSBuildVersion.VS2026, MSBuildVersion.VS2022, MSBuildVersion.VS2019, MSBuildVersion.VS2017 }
from platform in s_platforms
from edition in typeof(VisualStudioEdition).GetEnumValues<VisualStudioEdition>()
let folder = version == MSBuildVersion.VS2022 && edition != VisualStudioEdition.BuildTools
? SpecialFolders.ProgramFiles
: SpecialFolders.ProgramFilesX86
let folder = GetProgramFilesFolder(version, edition)
select GetFromVs2017Instance(version, platform, edition, folder));

instances.AddRange(
Expand All @@ -71,10 +69,9 @@ private static Instance GetFromVs2017Instance(
VisualStudioEdition edition,
SpecialFolders specialFolder)
{
var versionDirectoryName = version.ToString().TrimStart("VS");
var basePath = Path.Combine(
EnvironmentInfo.SpecialFolder(specialFolder).NotNull(),
$@"Microsoft Visual Studio\{versionDirectoryName}\{edition}\MSBuild\{GetVersionFolder(version)}\Bin");
$@"Microsoft Visual Studio\{GetVisualStudioFolder(version)}\{edition}\MSBuild\{GetVersionFolder(version)}\Bin");

return new Instance(
version,
Expand All @@ -98,6 +95,33 @@ private static Instance GetVs2013To2015Instance(MSBuildPlatform platform, MSBuil
: basePath);
}

private static SpecialFolders GetProgramFilesFolder(MSBuildVersion version, VisualStudioEdition edition)
{
if (edition == VisualStudioEdition.BuildTools)
{
return SpecialFolders.ProgramFilesX86;
}

return version switch
{
MSBuildVersion.VS2013 => SpecialFolders.ProgramFilesX86,
MSBuildVersion.VS2015 => SpecialFolders.ProgramFilesX86,
MSBuildVersion.VS2017 => SpecialFolders.ProgramFilesX86,
MSBuildVersion.VS2019 => SpecialFolders.ProgramFilesX86,
// Versions VS2022+ are 64-bit
_ => SpecialFolders.ProgramFiles
};
}

private static string GetVisualStudioFolder(MSBuildVersion version)
{
return version switch
{
MSBuildVersion.VS2026 => "18",
_ => version.ToString().TrimStart("VS")
};
}

private static string GetVersionFolder(MSBuildVersion version)
{
return version switch
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
Loading