From 2f2d777fe8a70f10fe6e2ad1dd61c8cf26780d18 Mon Sep 17 00:00:00 2001 From: Patrick Brunck Date: Thu, 31 Aug 2023 10:48:11 +0200 Subject: [PATCH 1/2] Fixes #324 partially by extending the MSBuild registration logic --- src/Microsoft.OData.Cli/Program.cs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.OData.Cli/Program.cs b/src/Microsoft.OData.Cli/Program.cs index 0003f615..28d2dffe 100644 --- a/src/Microsoft.OData.Cli/Program.cs +++ b/src/Microsoft.OData.Cli/Program.cs @@ -1,5 +1,8 @@ using System.CommandLine; +using System.IO; +using System.Linq; using System.Threading.Tasks; +using Microsoft.Build.Locator; namespace Microsoft.OData.Cli { @@ -7,12 +10,36 @@ class Program { static async Task Main(string[] args) { - Build.Locator.MSBuildLocator.RegisterDefaults(); + RegisterMsBuild(); GenerateCommand generateCommand = new GenerateCommand(); RootCommand app = new RootCommand { generateCommand }; await app.InvokeAsync(args); } + + /// + /// Tries to register MSBuild from Visual Studio install folder. If not available, register defaults. + /// + private static void RegisterMsBuild() + { + const string defaultInstallDirOfVisualStudio = @"C:\Program Files\Microsoft Visual Studio\"; + var installDirOfLatestVisualStudio = Directory.GetDirectories(defaultInstallDirOfVisualStudio, "????", SearchOption.TopDirectoryOnly) + .Where(x => Path.GetFileName(x).All(char.IsDigit)) + .MaxBy(x => Path.GetFileName(x)); + + string pathToMsBuildExeInLatestVisualStudioVersion = Path.Combine( + Directory.GetDirectories(installDirOfLatestVisualStudio, "*", SearchOption.TopDirectoryOnly).FirstOrDefault() ?? string.Empty, + "MSBuild", "Current", "Bin", "MSBuild.exe"); + + if (File.Exists(pathToMsBuildExeInLatestVisualStudioVersion)) + { + MSBuildLocator.RegisterMSBuildPath(Path.GetDirectoryName(pathToMsBuildExeInLatestVisualStudioVersion)); + } + else + { + MSBuildLocator.RegisterDefaults(); + } + } } } From 43cae88da3548e8cd7247be1edad5eaecfe0a1da Mon Sep 17 00:00:00 2001 From: Patrick Brunck Date: Sat, 2 Sep 2023 12:38:53 +0200 Subject: [PATCH 2/2] Fixes #324 | Bugfix to previous commit --- src/Microsoft.OData.Cli/Program.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.OData.Cli/Program.cs b/src/Microsoft.OData.Cli/Program.cs index 28d2dffe..bcebb17f 100644 --- a/src/Microsoft.OData.Cli/Program.cs +++ b/src/Microsoft.OData.Cli/Program.cs @@ -23,14 +23,18 @@ static async Task Main(string[] args) /// private static void RegisterMsBuild() { + string pathToMsBuildExeInLatestVisualStudioVersion = string.Empty; const string defaultInstallDirOfVisualStudio = @"C:\Program Files\Microsoft Visual Studio\"; - var installDirOfLatestVisualStudio = Directory.GetDirectories(defaultInstallDirOfVisualStudio, "????", SearchOption.TopDirectoryOnly) - .Where(x => Path.GetFileName(x).All(char.IsDigit)) - .MaxBy(x => Path.GetFileName(x)); + if (Directory.Exists(defaultInstallDirOfVisualStudio)) + { + var installDirOfLatestVisualStudio = Directory.GetDirectories(defaultInstallDirOfVisualStudio, "????", SearchOption.TopDirectoryOnly) + .Where(x => Path.GetFileName(x).All(char.IsDigit)) + .MaxBy(x => Path.GetFileName(x)); - string pathToMsBuildExeInLatestVisualStudioVersion = Path.Combine( - Directory.GetDirectories(installDirOfLatestVisualStudio, "*", SearchOption.TopDirectoryOnly).FirstOrDefault() ?? string.Empty, - "MSBuild", "Current", "Bin", "MSBuild.exe"); + pathToMsBuildExeInLatestVisualStudioVersion = Path.Combine( + Directory.GetDirectories(installDirOfLatestVisualStudio, "*", SearchOption.TopDirectoryOnly).FirstOrDefault() ?? string.Empty, + "MSBuild", "Current", "Bin", "MSBuild.exe"); + } if (File.Exists(pathToMsBuildExeInLatestVisualStudioVersion)) {