public static string GetMsBuildPathFromVSDirectory()

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 "";
        }