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