From 28dea81ed3dc9b6fbc202cc37d6577ff94a51e6e Mon Sep 17 00:00:00 2001 From: Diego Ajassa Date: Fri, 26 Oct 2018 13:54:27 +0200 Subject: [PATCH 1/3] Added teh possibility to load also a test project when switching to project references. Removing this project when switching back --- .../FromNuGetToProjectTransformation.cs | 32 ++++++++++++++++++ .../FromProjectToNuGetTransformation.cs | 3 ++ .../Models/ProjectModel.cs | 5 +-- .../ViewModels/MainDialogModel.cs | 33 ++++++++++++++++--- .../Views/MainDialog.xaml | 10 ++++++ .../Views/MainDialog.xaml.cs | 19 +++++++++++ 6 files changed, 95 insertions(+), 7 deletions(-) diff --git a/src/NuGetReferenceSwitcher.Presentation/Models/FromNuGetToProjectTransformation.cs b/src/NuGetReferenceSwitcher.Presentation/Models/FromNuGetToProjectTransformation.cs index d6ef538..6059d76 100644 --- a/src/NuGetReferenceSwitcher.Presentation/Models/FromNuGetToProjectTransformation.cs +++ b/src/NuGetReferenceSwitcher.Presentation/Models/FromNuGetToProjectTransformation.cs @@ -23,7 +23,9 @@ public enum NuGetToProjectMode public class FromNuGetToProjectTransformation : ObservableObject { private string _toProjectPath; + private string _toTestProjectPath; private ProjectModel _toProject; + private ProjectModel _toTestProject; /// Initializes a new instance of the class. /// The projects. @@ -96,6 +98,36 @@ public ProjectModel ToProject } } + public ProjectModel ToTestProject + { + get { return _toTestProject; } + set + { + if (Set(ref _toTestProject, value)) + { + if (_toTestProject == null) + SelectedMode = NuGetToProjectMode.ProjectPath; + else + SelectedMode = NuGetToProjectMode.Project; + } + } + } + + public string ToTestProjectPath + { + get { return _toTestProjectPath; } + set + { + if (Set(ref _toTestProjectPath, value)) + { + if (_toTestProjectPath == null) + SelectedMode = NuGetToProjectMode.Project; + else + SelectedMode = NuGetToProjectMode.ProjectPath; + } + } + } + /// Gets the evaluated to project path. public string EvaluatedToProjectPath { diff --git a/src/NuGetReferenceSwitcher.Presentation/Models/FromProjectToNuGetTransformation.cs b/src/NuGetReferenceSwitcher.Presentation/Models/FromProjectToNuGetTransformation.cs index e223bfc..85a2709 100644 --- a/src/NuGetReferenceSwitcher.Presentation/Models/FromProjectToNuGetTransformation.cs +++ b/src/NuGetReferenceSwitcher.Presentation/Models/FromProjectToNuGetTransformation.cs @@ -18,5 +18,8 @@ public class FromProjectToNuGetTransformation /// Gets or sets the NuGet assembly path name to switch to. public string ToAssemblyPath { get; set; } + + /// Gets or sets the test project name. + public string FromTestProjectName { get; set; } } } \ No newline at end of file diff --git a/src/NuGetReferenceSwitcher.Presentation/Models/ProjectModel.cs b/src/NuGetReferenceSwitcher.Presentation/Models/ProjectModel.cs index 40e7d48..26f8209 100644 --- a/src/NuGetReferenceSwitcher.Presentation/Models/ProjectModel.cs +++ b/src/NuGetReferenceSwitcher.Presentation/Models/ProjectModel.cs @@ -144,7 +144,7 @@ private List LoadTransformationsFromFile(strin { var lines = File.ReadAllLines(configurationPath) .Select(l => l.Split('\t')) - .Where(l => l.Length == 3).ToArray(); + .Where(l => l.Length == 4).ToArray(); @@ -152,7 +152,8 @@ private List LoadTransformationsFromFile(strin list.Add(new FromProjectToNuGetTransformation { FromProjectName = line[0], FromProjectPath = PathUtilities.MakeAbsolute(line[1], configurationPath), - ToAssemblyPath = PathUtilities.MakeAbsolute(line[2], configurationPath) + ToAssemblyPath = PathUtilities.MakeAbsolute(line[2], configurationPath), + FromTestProjectName = line[3] }); } return list; diff --git a/src/NuGetReferenceSwitcher.Presentation/ViewModels/MainDialogModel.cs b/src/NuGetReferenceSwitcher.Presentation/ViewModels/MainDialogModel.cs index 41a9a7a..f0a86cf 100644 --- a/src/NuGetReferenceSwitcher.Presentation/ViewModels/MainDialogModel.cs +++ b/src/NuGetReferenceSwitcher.Presentation/ViewModels/MainDialogModel.cs @@ -130,11 +130,16 @@ await RunTaskAsync(token => Task.Run(() => project.AddProjectReference(assemblyToProjectSwitch.ToProject); nuGetReferenceTransformationsForProject += - assemblyToProjectSwitch.ToProject.Name + "\t" + + assemblyToProjectSwitch.ToProject.Name + + "\t" + PathUtilities.MakeRelative(assemblyToProjectSwitch.ToProject.Path, - project.CurrentConfigurationPath) + "\t" + + project.CurrentConfigurationPath) + + "\t" + PathUtilities.MakeRelative(fromAssemblyPath, project.CurrentConfigurationPath) + - "\n"; + "\t" + + assemblyToProjectSwitch.ToTestProject.Name + + "\t" + + "\n"; } else { @@ -156,6 +161,8 @@ await RunTaskAsync(token => Task.Run(() => }, token)); } + + /// Handles an exception which occured in the method. /// The exception. public override void HandleException(Exception exception) @@ -186,7 +193,7 @@ await RunTaskAsync(token => Task.Run(() => { MessageBox.Show("The project '" + transformation.ToAssemblyPath + "' could not be added. " + "\nSkipped.", "Could not add project", MessageBoxButton.OK, MessageBoxImage.Error); - } + } } } @@ -245,15 +252,31 @@ private void AddProjectToSolutionIfNeeded(FromNuGetToProjectTransformation fromN } else MessageBox.Show("The project '" + fromNuGetToProjectTransformation.ToProjectPath + "' could not be found. (ignored)", "Project not found", MessageBoxButton.OK, MessageBoxImage.Stop); + if (!string.IsNullOrEmpty(fromNuGetToProjectTransformation.ToTestProjectPath) && File.Exists(fromNuGetToProjectTransformation.ToTestProjectPath)) + { + var project = Application.Solution.AddFromFile(fromNuGetToProjectTransformation.ToTestProjectPath); + var myProject = new ProjectModel((VSProject)project.Object, Application); + fromNuGetToProjectTransformation.ToTestProject = myProject; + } + else + MessageBox.Show("The project '" + fromNuGetToProjectTransformation.ToTestProjectPath + "' could not be found. (ignored)", "Project not found", MessageBoxButton.OK, MessageBoxImage.Stop); } } private List GetCurrentProjectsToRemove() { - return Projects + var pjToRemove = new List(); + var projectsToRemove = Projects .SelectMany(p => p.CurrentToNuGetTransformations.Select(s => s.FromProjectName)) .Select(name => Projects.SingleOrDefault(p => p.Name == name)) .ToList(); + pjToRemove.AddRange(projectsToRemove); + var testProjectsToRemove = Projects + .SelectMany(p => p.CurrentToNuGetTransformations.Select(s => s.FromTestProjectName)) + .Select(name => Projects.SingleOrDefault(p => p.Name == name)) + .ToList(); + pjToRemove.AddRange(testProjectsToRemove); + return pjToRemove; } private void RemoveProjectsFromSolution(List projectsToDelete) diff --git a/src/NuGetReferenceSwitcher.Presentation/Views/MainDialog.xaml b/src/NuGetReferenceSwitcher.Presentation/Views/MainDialog.xaml index fbb3307..6fa91ff 100644 --- a/src/NuGetReferenceSwitcher.Presentation/Views/MainDialog.xaml +++ b/src/NuGetReferenceSwitcher.Presentation/Views/MainDialog.xaml @@ -68,6 +68,16 @@ SelectedItem="{Binding ToProject, Mode=TwoWay}" DisplayMemberPath="Name" /> + +