/// <summary> /// Loads the current development environment. /// </summary> /// <returns>A <see cref="DevelopmentEnvironment" /> object containing information about the current development environment.</returns> public static DevelopmentEnvironment LoadCurrentDevelopmentEnvironment() { string msbuildToolset = Environment.GetEnvironmentVariable("MSBuildToolset")?.Trim(); if (!msbuildToolset.IsNullOrWhiteSpace()) { string msbuildToolsPath = Environment.GetEnvironmentVariable($"MSBuildToolsPath_{msbuildToolset}")?.Trim(); if (!msbuildToolsPath.IsNullOrWhiteSpace()) { #if NETFRAMEWORK if (!Version.TryParse(Environment.GetEnvironmentVariable("VisualStudioVersion") ?? string.Empty, out Version visualStudioVersion)) { return(new DevelopmentEnvironment("The VisualStudioVersion environment variable must be set in CoreXT")); } if (visualStudioVersion.Major <= 14) { return(new DevelopmentEnvironment("MSBuild.Corext version 15.0 or greater is required")); } return(new DevelopmentEnvironment { MSBuildExe = new FileInfo(Path.Combine(msbuildToolsPath !, "MSBuild.exe")), IsCorext = true, VisualStudio = VisualStudioConfiguration.GetLaunchableInstances() .Where(i => !i.IsBuildTools && i.HasMSBuild && i.InstallationVersion.Major == visualStudioVersion.Major) .OrderByDescending(i => i.InstallationVersion) .FirstOrDefault(), });
private static bool TryGetVisualStudioFromCorext(out VisualStudioInstance instance) { instance = null; if (!Version.TryParse(Environment.GetEnvironmentVariable("VisualStudioVersion"), out Version visualStudioVersion)) { return(false); } VisualStudioConfiguration configuration = new VisualStudioConfiguration(); instance = configuration.GetLaunchableInstances() .Where(i => !i.IsBuildTools && i.HasMSBuild && i.InstallationVersion.Major == visualStudioVersion.Major) .OrderByDescending(i => i.InstallationVersion) .FirstOrDefault(); return(instance != null); }
private static DevelopmentEnvironment LoadDevelopmentEnvironmentFromCoreXT(string msbuildToolsPath) { if (!Version.TryParse(Environment.GetEnvironmentVariable("VisualStudioVersion") ?? string.Empty, out Version visualStudioVersion)) { return(new DevelopmentEnvironment("The VisualStudioVersion environment variable must be set in CoreXT")); } if (visualStudioVersion.Major <= 14) { return(new DevelopmentEnvironment("MSBuild.Corext version 15.0 or greater is required")); } return(new DevelopmentEnvironment { MSBuildExe = new FileInfo(Path.Combine(msbuildToolsPath !, "MSBuild.exe")), IsCorext = true, VisualStudio = VisualStudioConfiguration.GetLaunchableInstances() .Where(i => !i.IsBuildTools && i.HasMSBuild && i.InstallationVersion.Major == visualStudioVersion.Major) .OrderByDescending(i => i.InstallationVersion) .FirstOrDefault(), });
public static bool TryLocate(Action <string> error, out VisualStudioInstance instance, out string msbuildBinPath) { instance = null; msbuildBinPath = null; string msbuildToolset = Environment.GetEnvironmentVariable("MSBuildToolset")?.Trim(); if (!msbuildToolset.IsNullOrWhiteSpace()) { string msbuildToolsPath = Environment.GetEnvironmentVariable($"MSBuildToolsPath_{msbuildToolset}")?.Trim(); if (!msbuildToolsPath.IsNullOrWhiteSpace()) { if (Program.IsNetCore) { error("The .NET Core version of SlnGen is not supported in CoreXT. You must use the .NET Framework version via the SlnGen.Corext package"); return(false); } msbuildBinPath = msbuildToolsPath; if (Version.TryParse(Environment.GetEnvironmentVariable("VisualStudioVersion") ?? string.Empty, out Version visualStudioVersion)) { if (visualStudioVersion.Major <= 14) { error("MSBuild.Corext version 15.0 or greater is required"); return(false); } VisualStudioConfiguration configuration = new VisualStudioConfiguration(); instance = configuration.GetLaunchableInstances() .Where(i => !i.IsBuildTools && i.HasMSBuild && i.InstallationVersion.Major == visualStudioVersion.Major) .OrderByDescending(i => i.InstallationVersion) .FirstOrDefault(); } else { error("The VisualStudioVersion environment variable must be set in CoreXT"); return(false); } Program.IsCorext = true; return(true); } } TryGetVisualStudioFromDeveloperConsole(out instance); if (Program.IsNetCore) { if (!TryGetMSBuildInNetCore(out msbuildBinPath, out string errorMessage)) { if (!string.IsNullOrWhiteSpace(errorMessage)) { error($"Failed to find .NET Core: {errorMessage}"); } else { error("Failed to find .NET Core. Run dotnet --info for more information."); } return(false); } return(true); } if (instance == null) { error("You must run SlnGen in a Visual Studio Developer Command Prompt"); return(false); } msbuildBinPath = Path.Combine( instance.InstallationPath, "MSBuild", instance.InstallationVersion.Major >= 16 ? "Current" : "15.0", "Bin"); return(true); }