private void PopulatePre2017InstallPath(
            VisualizerAssembly visualizerAssembly,
            ICollection <VisualizerInstaller> installers)
        {
            if (visualizerAssembly.VsYear >= 2017)
            {
                return;
            }

            var pre2017Key = _vsPre2017KeyNames
                             .FirstOrDefault(name => name == visualizerAssembly.VsFullVersionNumber);

            if (pre2017Key == null)
            {
                return;
            }

            using (var vsSubKey = _vsPre2017MachineKey.OpenSubKey(pre2017Key))
            {
                var installDirectory = vsSubKey?.GetValue("InstallDir") as string;

                if (string.IsNullOrWhiteSpace(installDirectory) || !Directory.Exists(installDirectory))
                {
                    return;
                }

                installers.Add(CreateInstaller(vsSubKey, installDirectory, visualizerAssembly));
            }
        }
        private bool TryPopulateInstallers(
            VisualizerAssembly visualizerAssembly,
            out ICollection <VisualizerInstaller> installers)
        {
            installers = new List <VisualizerInstaller>();

            PopulatePre2017InstallPath(visualizerAssembly, installers);
            PopulatePost2015InstallPaths(visualizerAssembly, installers);

            return(installers.Count > 0);
        }
 private VisualizerInstaller CreateInstaller(
     RegistryKey registryKey,
     string vsInstallDirectory,
     VisualizerAssembly visualizerAssembly)
 {
     return(new VisualizerInstaller(
                _logger,
                _vsixManifest,
                registryKey,
                vsInstallDirectory,
                visualizerAssembly));
 }
        private void PopulatePost2015InstallPaths(
            VisualizerAssembly visualizerAssembly,
            ICollection <VisualizerInstaller> installers)
        {
            if (visualizerAssembly.VsYear <= 2015)
            {
                return;
            }

            foreach (var dataItem in _vsPost2015Data)
            {
                if (dataItem.IsValid &&
                    (dataItem.VsFullVersionNumber == visualizerAssembly.VsFullVersionNumber))
                {
                    installers.Add(CreateInstaller(
                                       dataItem.RegistryKey,
                                       dataItem.InstallDirectory,
                                       visualizerAssembly));
                }
            }
        }
Exemple #5
0
        public VisualizerInstaller(
            Action <string> logger,
            VsixManifest vsixManifest,
            RegistryKey registryKey,
            string vsInstallDirectory,
            VisualizerAssembly visualizerAssembly)
        {
            _logger = logger;

            _vsixManifestInstaller = new VsixManifestInstaller(
                logger,
                registryKey,
                vsInstallDirectory,
                vsixManifest);

            _visualizerAssembly = visualizerAssembly;
            VsId = _visualizerAssembly.VsYear.ToString();

            var indexOfIde    = vsInstallDirectory.IndexOf("IDE", OrdinalIgnoreCase);
            var pathToCommon7 = vsInstallDirectory.Substring(0, indexOfIde);

            _visualizersDirectory = Path.Combine(pathToCommon7, "Packages", "Debugger", "Visualizers");
        }
 public IEnumerable <VisualizerInstaller> GetInstallersFor(VisualizerAssembly visualizerAssembly)
 {
     return(TryPopulateInstallers(visualizerAssembly, out var visualizerInstallers)
         ? visualizerInstallers
         : Enumerable.Empty <VisualizerInstaller>());
 }