Example #1
0
        public static string GetMsbuildFilePath()
        {
            if (string.IsNullOrWhiteSpace(MsBuildFilePath))
            {
                VisualStudioInstance instance = GetVisualStudioInstance();

                if (instance != null)
                {
                    foreach (string path in MsBuildPathArray)
                    {
                        string file = instance.Path + path;

                        if (File.Exists(file))
                        {
                            MsBuildFilePath = file;
                            break;
                        }
                    }
                }
            }

            if (string.IsNullOrWhiteSpace(MsBuildFilePath))
            {
                string vswhere = GetVswhereFilePath();

                if (string.IsNullOrWhiteSpace(vswhere))
                {
                    return(null);
                }

                // -latest -requires Microsoft.Component.MSBuild -find "MSBuild\**\Bin\MSBuild.exe"
                string vswhereResult = Win32.ShellExecute(
                    vswhere,
                    "-latest " +
                    "-prerelease " +
                    "-products * " +
                    "-requiresAny " +
                    "-requires Microsoft.Component.MSBuild " +
                    "-property installationPath "
                    );

                if (!string.IsNullOrWhiteSpace(vswhereResult))
                {
                    foreach (string path in MsBuildPathArray)
                    {
                        string file = vswhereResult + path;

                        if (File.Exists(file))
                        {
                            MsBuildFilePath = file;
                            break;
                        }
                    }
                }
            }

            return(MsBuildFilePath);
        }
Example #2
0
        public static string GetMsbuildFilePath()
        {
            string vswhere = string.Empty;

            if (Environment.Is64BitOperatingSystem)
            {
                vswhere = Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe");
            }
            else
            {
                vswhere = Environment.ExpandEnvironmentVariables("%ProgramFiles%\\Microsoft Visual Studio\\Installer\\vswhere.exe");
            }

            // Note: vswere.exe was only released with build 15.0.26418.1
            if (File.Exists(vswhere))
            {
                string vswhereResult = Win32.ShellExecute(vswhere,
                                                          "-latest " +
                                                          "-products * " +
                                                          "-requires Microsoft.Component.MSBuild " +
                                                          "-property installationPath "
                                                          );

                if (string.IsNullOrEmpty(vswhereResult))
                {
                    return(null);
                }

                if (File.Exists(vswhereResult + "\\MSBuild\\15.0\\Bin\\MSBuild.exe"))
                {
                    return(vswhereResult + "\\MSBuild\\15.0\\Bin\\MSBuild.exe");
                }

                return(null);
            }
            else
            {
                try
                {
                    VisualStudioInstance instance = FindVisualStudioInstance();

                    if (instance != null)
                    {
                        if (File.Exists(instance.Path + "\\MSBuild\\15.0\\Bin\\MSBuild.exe"))
                        {
                            return(instance.Path + "\\MSBuild\\15.0\\Bin\\MSBuild.exe");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Program.PrintColorMessage("[VisualStudioInstance] " + ex, ConsoleColor.Red, true);
                }

                return(null);
            }
        }
        public static string GetMsbuildFilePath()
        {
            VisualStudioInstance instance = FindVisualStudioInstance();

            if (instance != null)
            {
                if (File.Exists(instance.Path + "\\MSBuild\\15.0\\Bin\\MSBuild.exe"))
                {
                    return(instance.Path + "\\MSBuild\\15.0\\Bin\\MSBuild.exe");
                }
            }

            return(null);
        }
Example #4
0
        public static string GetMsbuildFilePath()
        {
            string vswhere = Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe");

            // Note: vswere.exe was only released with build 15.0.26418.1
            if (File.Exists(vswhere))
            {
                string vswhereResult = Win32.ShellExecute(vswhere,
                                                          "-latest " +
                                                          "-requires Microsoft.Component.MSBuild " +
                                                          "-property installationPath "
                                                          );

                if (string.IsNullOrEmpty(vswhereResult))
                {
                    return(null);
                }

                if (File.Exists(vswhereResult + "\\MSBuild\\15.0\\Bin\\MSBuild.exe"))
                {
                    return(vswhereResult + "\\MSBuild\\15.0\\Bin\\MSBuild.exe");
                }

                return(null);
            }
            else
            {
                VisualStudioInstance instance = FindVisualStudioInstance();

                if (instance != null)
                {
                    if (File.Exists(instance.Path + "\\MSBuild\\15.0\\Bin\\MSBuild.exe"))
                    {
                        return(instance.Path + "\\MSBuild\\15.0\\Bin\\MSBuild.exe");
                    }
                }

                return(null);
            }
        }
Example #5
0
        private static VisualStudioInstance FindVisualStudioInstance()
        {
            var setupConfiguration = new SetupConfiguration() as ISetupConfiguration2;
            var instanceEnumerator = setupConfiguration.EnumAllInstances();
            var instances          = new ISetupInstance2[3];

            instanceEnumerator.Next(instances.Length, instances, out var instancesFetched);

            if (instancesFetched == 0)
            {
                return(null);
            }

            do
            {
                for (int i = 0; i < instancesFetched; i++)
                {
                    var instance = new VisualStudioInstance(instances[i]);
                    var state    = instances[i].GetState();
                    var packages = instances[i].GetPackages().Where(package => package.GetId().Contains("Microsoft.Component.MSBuild"));

                    if (
                        state.HasFlag(InstanceState.Local | InstanceState.Registered | InstanceState.Complete) &&
                        packages.Count() > 0 &&
                        instance.Version.StartsWith("15.0", StringComparison.OrdinalIgnoreCase)
                        )
                    {
                        return(instance);
                    }
                }

                instanceEnumerator.Next(instances.Length, instances, out instancesFetched);
            }while (instancesFetched != 0);

            return(null);
        }
Example #6
0
        public static VisualStudioInstance GetVisualStudioInstance()
        {
            if (VisualStudioInstanceList == null)
            {
                VisualStudioInstanceList = new List <VisualStudioInstance>();

                try
                {
                    if (new SetupConfigurationClass() is ISetupConfiguration2 setupConfiguration)
                    {
                        IEnumSetupInstances instanceEnumerator = setupConfiguration.EnumAllInstances();
                        ISetupInstance2[]   instances          = new ISetupInstance2[3];

                        instanceEnumerator.Next(instances.Length, instances, out var instancesFetched);

                        if (instancesFetched == 0)
                        {
                            return(null);
                        }

                        do
                        {
                            for (int i = 0; i < instancesFetched; i++)
                            {
                                VisualStudioInstanceList.Add(new VisualStudioInstance(instances[i]));
                            }

                            instanceEnumerator.Next(instances.Length, instances, out instancesFetched);
                        }while (instancesFetched != 0);
                    }
                }
                catch { }

                VisualStudioInstanceList.Sort((p1, p2) =>
                {
                    if (Version.TryParse(p1.InstallationVersion, out Version version1) && Version.TryParse(p2.InstallationVersion, out Version version2))
                    {
                        if (version1 < version2)
                        {
                            return(1);
                        }
                        else if (version1 > version2)
                        {
                            return(-1);
                        }

                        return(version1.CompareTo(version2));
                    }

                    return(1);
                });
            }

            if (VisualStudioInstance == null)
            {
                foreach (VisualStudioInstance instance in VisualStudioInstanceList)
                {
                    if (instance.HasRequiredDependency)
                    {
                        VisualStudioInstance = instance;
                        break;
                    }
                }
            }

            return(VisualStudioInstance);
        }
Example #7
0
        public static string GetMsbuildFilePath()
        {
            string[] MsBuildPathArray =
            {
                "\\MSBuild\\Current\\Bin\\MSBuild.exe",
                "\\MSBuild\\15.0\\Bin\\MSBuild.exe"
            };

            string vswhere = Environment.ExpandEnvironmentVariables("%ProgramFiles%\\Microsoft Visual Studio\\Installer\\vswhere.exe");

            if (!File.Exists(vswhere))
            {
                vswhere = Environment.ExpandEnvironmentVariables("%ProgramFiles(x86)%\\Microsoft Visual Studio\\Installer\\vswhere.exe");
            }

            if (!File.Exists(vswhere))
            {
                vswhere = Environment.ExpandEnvironmentVariables("%ProgramW6432%\\Microsoft Visual Studio\\Installer\\vswhere.exe");
            }

            if (File.Exists(vswhere))
            {
                string vswhereResult = Win32.ShellExecute(vswhere,
                                                          "-latest " +
                                                          "-prerelease " +
                                                          "-products * " +
                                                          "-requires Microsoft.Component.MSBuild " +
                                                          "-property installationPath "
                                                          );

                if (string.IsNullOrEmpty(vswhereResult))
                {
                    return(null);
                }

                foreach (string path in MsBuildPathArray)
                {
                    if (File.Exists(vswhereResult + path))
                    {
                        return(vswhereResult + path);
                    }
                }

                return(null);
            }
            else
            {
                try
                {
                    VisualStudioInstance instance = FindVisualStudioInstance();

                    if (instance != null)
                    {
                        foreach (string path in MsBuildPathArray)
                        {
                            if (File.Exists(instance.Path + path))
                            {
                                return(instance.Path + path);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Program.PrintColorMessage("[VisualStudioInstance] " + ex, ConsoleColor.Red, true);
                }

                return(null);
            }
        }