查找并返回Visual Studio版本

时间:2017-07-18 18:39:52

标签: c# visual-studio visual-studio-2017

好吧,我被困住了,我想我需要一些帮助。我有多个版本的Visual Studio Installed。启动应用程序时,我希望它能够找到所有Visual Studio版本并返回它们,以便用户可以选择他们想要使用的版本。在早期版本中,您可以使用路径和注册表项来检查已安装的版本。

现在VS17更轻量级,安装方式不同,因此您无法再使用注册表项。我正在查看https://code.msdn.microsoft.com/windowsdesktop/Visual-Studio-Setup-0cedd331#contenthttps://github.com/Microsoft/vswhere,但我似乎无法让它们发挥作用。

这个想法是用户会点击内部应用程序中的解决方案文件,我们将启动最新版本的Visual Studio。

以下是当前代码如何查找以前版本的片段:

        private class VsVersion
    {
        public static VsVersion TryResolveInstalledVersion()
        {
            // Note: Newest version first
            // Note: This search will fail on 32-bit systems
            var versions = new[] {
                new {
                    ExecutablePath = @"%PROGRAMFILES(x86)%\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe",
                    RegistrySubKey = @"Software\Microsoft\VisualStudio\14.0"
                },
                new {
                    ExecutablePath = @"%PROGRAMFILES(x86)%\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe",
                    RegistrySubKey = @"Software\Microsoft\VisualStudio\12.0"
                },
                new {
                    ExecutablePath = @"%PROGRAMFILES(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe",
                    RegistrySubKey = @"Software\Microsoft\VisualStudio\11.0"
                }
            };

            foreach (var version in versions)
            {
                var executablePath = Environment.ExpandEnvironmentVariables(version.ExecutablePath);

                if (File.Exists(executablePath))
                {
                    return new VsVersion(executablePath, version.RegistrySubKey);
                }
            }

            return null;
        }

        private VsVersion(string executablePath, string registrySubKey)
        {
            ExecutablePath = executablePath;
            RegistrySubKey = registrySubKey;
        }

        public string ExecutablePath { get; }
        public string RegistrySubKey { get; }
    }

0 个答案:

没有答案