Exemple #1
0
        /// <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(),
                    });
Exemple #2
0
        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);
        }
Exemple #3
0
        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(),
            });
Exemple #4
0
        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);
        }