From 9c32b429aa390383708da3e4f26700f8d92537cf Mon Sep 17 00:00:00 2001 From: Matthias Koch Date: Thu, 2 May 2019 01:02:03 +0200 Subject: [PATCH] Add MSBuild resolution for Visual Studio 2019 --- .../Tools/MSBuild/MSBuildToolPathResolver.cs | 17 +++++++++++------ .../Nuke.Common/Tools/MSBuild/MSBuildVersion.cs | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs b/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs index d92b85c3a..872e46e10 100644 --- a/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs +++ b/source/Nuke.Common/Tools/MSBuild/MSBuildToolPathResolver.cs @@ -7,6 +7,7 @@ using System.Diagnostics; using System.IO; using System.Linq; +using Nuke.Common.Utilities; namespace Nuke.Common.Tools.MSBuild { @@ -38,9 +39,10 @@ private static IEnumerable ResolveInternal(MSBuildVersion? msBuildVersio var instances = new List(); instances.AddRange( - from vs2017Edition in new[] { "Enterprise", "Professional", "Community", "BuildTools" } - from platform1 in s_platforms - select GetVs2017Instance(platform1, vs2017Edition)); + from version in new[]{MSBuildVersion.VS2019, MSBuildVersion.VS2017} + from platform in s_platforms + from edition in new[] { "Enterprise", "Professional", "Community", "BuildTools" } + select GetFromVs2017Instance(version, platform, edition)); instances.AddRange( from version in new[] { MSBuildVersion.VS2015, MSBuildVersion.VS2013 } @@ -59,14 +61,15 @@ from platform in s_platforms return filteredInstances.Select(x => x.ToolPath); } - private static Instance GetVs2017Instance(MSBuildPlatform platform, string vs2017Edition) + private static Instance GetFromVs2017Instance(MSBuildVersion version, MSBuildPlatform platform, string edition) { + var versionDirectoryName = version.ToString().TrimStart("VS"); var basePath = Path.Combine( EnvironmentInfo.SpecialFolder(SpecialFolders.ProgramFilesX86).NotNull("path1 != null"), - $@"Microsoft Visual Studio\2017\{vs2017Edition}\MSBuild\{GetVersionFolder(MSBuildVersion.VS2017)}\Bin"); + $@"Microsoft Visual Studio\{versionDirectoryName}\{edition}\MSBuild\{GetVersionFolder(version)}\Bin"); return new Instance( - MSBuildVersion.VS2017, + version, platform, platform == MSBuildPlatform.x64 ? Path.Combine(basePath, "amd64") @@ -91,6 +94,8 @@ private static string GetVersionFolder(MSBuildVersion version) { switch (version) { + case MSBuildVersion.VS2019: + return "Current"; case MSBuildVersion.VS2017: return "15.0"; case MSBuildVersion.VS2015: diff --git a/source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs b/source/Nuke.Common/Tools/MSBuild/MSBuildVersion.cs index a569f5ca0..746ef0e0a 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 { + VS2019, VS2017, VS2015, VS2013