in src/Analysis/Codelyzer.Analysis.Build/WorkspaceBuilderHelper.cs [611:642]
public static string GetMsBuildPathFromVSDirectory(DirectoryInfo vsDirectory, List<string> editions, string[] targets)
{
if (vsDirectory.Exists)
{ List<FileInfo> msBuildExePath = vsDirectory
.GetDirectories("MSBuild", SearchOption.AllDirectories)
.SelectMany(msBuildDir => msBuildDir.GetFiles("MSBuild.exe", SearchOption.AllDirectories))
.OrderByDescending(msbuild => FileVersionInfo.GetVersionInfo(msbuild.FullName).FileVersion)
.ThenBy(msbuild => editions.IndexOf(GetEditionType(msbuild.DirectoryName, editions)))
.ThenBy(msbuild =>
{
var folderName = GetVersionFolder(msbuild.FullName);
if (folderName.ToLower() == "current") return -100;
else
{
if(double.TryParse(folderName, out double result))
{
return -1 * result;
}
return -100;
}
})
.Where(msbuild =>
{
var targetsWithPath = GetTargetsWithPath(msbuild.DirectoryName, targets);
if (targetsWithPath.TrueForAll(File.Exists)) return true;
return false;
})
.ToList();
return msBuildExePath?.FirstOrDefault()?.FullName;
};
return "";
}