public void TearDown()
 {
     this.referenceTemplates = null;
     this.variables          = null;
     this.sut = null;
     this.settingsBuilder.Dispose();
     this.settingsBuilder = null;
 }
 public void SetUp()
 {
     this.settingsBuilder    = new TestSettingsSerializer();
     this.referenceTemplates = this.settingsBuilder.CreateDefaultReferenceTemplates();
     this.variables          = this.settingsBuilder.CreateDefaultVariables();
     this.sut = new ProjectPathByReferenceCalculator(this.referenceTemplates, this.variables);
     this.referenceTemplates.Add(new Reference("reference1.v{version}", "path1"));
     this.referenceTemplates.Add(new Reference("reference1.v{version}", "path2"));
 }
        static void Execute(Package package, EnvDTE.DTE dte)
        {
            DTE2          envDTE        = dte as EnvDTE80.DTE2;
            SelectedItems selectedItems = envDTE.SelectedItems;

            System.Array solutionProjects = envDTE.ActiveSolutionProjects as System.Array;

            List <VSLangProj.Reference> selectedReferences = new List <VSLangProj.Reference>();

            foreach (Project project in solutionProjects)
            {
                Debug.WriteLine($"{project.Name}");
                VSLangProj.VSProject vsProject = project.Object as VSLangProj.VSProject;

                foreach (SelectedItem item in selectedItems)
                {
                    foreach (VSLangProj.Reference reference in vsProject.References)
                    {
                        if (reference.Name == item.Name)
                        {
                            selectedReferences.Add(reference);
                        }
                    }
                }
            }

            ReferencePatcherSettings.Instance.Reload();
            ReferencePatcherSettings settings = ReferencePatcherSettings.Instance;
            var calculator = new ProjectPathByReferenceCalculator(settings.References, settings.Variables);

            foreach (VSLangProj.Reference reference in selectedReferences)
            {
                VSLangProj.VSProject project = reference.ContainingProject.Object as VSLangProj.VSProject;
                List <string>        paths   = calculator.CalculatePaths(reference.Name);
                if (paths == null || paths.Count < 1)
                {
                    var newPath = ShowAddReferenceDialog(reference.Name);
                    if (String.IsNullOrEmpty(newPath))
                    {
                        continue;
                    }
                    paths.Add(newPath);
                }
                string path = paths.FirstOrDefault(somePath => File.Exists(somePath));
                if (String.IsNullOrEmpty(path))
                {
                    path = ShowAddReferenceDialog(reference.Name);
                    if (String.IsNullOrEmpty(path))
                    {
                        continue;
                    }
                }

                Project newProject = null;
                try {
                    newProject = envDTE.Solution.AddFromFile(path);
                } catch {
                    newProject = FindProject(envDTE, path, reference);
                }
                if (newProject == null)
                {
                    return;
                }
                reference.Remove();
                project.References.AddProject(newProject);
            }
        }