Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2f2d777

Browse files
committedAug 31, 2023
Fixes #324 partially by extending the MSBuild registration logic
1 parent de654bc commit 2f2d777

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed
 

‎src/Microsoft.OData.Cli/Program.cs

+28-1
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,45 @@
11
using System.CommandLine;
2+
using System.IO;
3+
using System.Linq;
24
using System.Threading.Tasks;
5+
using Microsoft.Build.Locator;
36

47
namespace Microsoft.OData.Cli
58
{
69
class Program
710
{
811
static async Task Main(string[] args)
912
{
10-
Build.Locator.MSBuildLocator.RegisterDefaults();
13+
RegisterMsBuild();
1114
GenerateCommand generateCommand = new GenerateCommand();
1215
RootCommand app = new RootCommand {
1316
generateCommand
1417
};
1518
await app.InvokeAsync(args);
1619
}
20+
21+
/// <summary>
22+
/// Tries to register MSBuild from Visual Studio install folder. If not available, register defaults.
23+
/// </summary>
24+
private static void RegisterMsBuild()
25+
{
26+
const string defaultInstallDirOfVisualStudio = @"C:\Program Files\Microsoft Visual Studio\";
27+
var installDirOfLatestVisualStudio = Directory.GetDirectories(defaultInstallDirOfVisualStudio, "????", SearchOption.TopDirectoryOnly)
28+
.Where(x => Path.GetFileName(x).All(char.IsDigit))
29+
.MaxBy(x => Path.GetFileName(x));
30+
31+
string pathToMsBuildExeInLatestVisualStudioVersion = Path.Combine(
32+
Directory.GetDirectories(installDirOfLatestVisualStudio, "*", SearchOption.TopDirectoryOnly).FirstOrDefault() ?? string.Empty,
33+
"MSBuild", "Current", "Bin", "MSBuild.exe");
34+
35+
if (File.Exists(pathToMsBuildExeInLatestVisualStudioVersion))
36+
{
37+
MSBuildLocator.RegisterMSBuildPath(Path.GetDirectoryName(pathToMsBuildExeInLatestVisualStudioVersion));
38+
}
39+
else
40+
{
41+
MSBuildLocator.RegisterDefaults();
42+
}
43+
}
1744
}
1845
}

0 commit comments

Comments
 (0)
Please sign in to comment.