/// <summary>Switches the NuGet DLL references to the selected project references. </summary> /// <returns>The task. </returns> public async Task SwitchToProjectReferencesAsync() { await RunTaskAsync(token => Task.Run(() => { // first, add all required projects var activeTransformations = _transformations .Where(p => p.SelectedMode != NuGetToProjectMode.Deactivated) .ToList(); foreach (var transformation in activeTransformations) { AddProjectToSolutionIfNeeded(transformation); } // then, run through all projects and replace nuget dependencies with project references foreach (var project in GetAllProjects(Application.Solution.Projects.OfType <Project>())) { var nuGetReferenceTransformationsForProject = ""; foreach (var assemblyToProjectSwitch in activeTransformations) { // take equality not on complete path, but on assembly name var reference = project.NuGetReferences .FirstOrDefault(r => r.Name == assemblyToProjectSwitch.FromAssemblyName); if (reference != null) { if (assemblyToProjectSwitch.ToProject != null) { var fromAssemblyPath = reference.Path; reference.Remove(); project.AddProjectReference(assemblyToProjectSwitch.ToProject); nuGetReferenceTransformationsForProject += assemblyToProjectSwitch.ToProject.Name + "\t" + PathUtilities.MakeRelative(assemblyToProjectSwitch.ToProject.Path, project.CurrentConfigurationPath) + "\t" + PathUtilities.MakeRelative(fromAssemblyPath, project.CurrentConfigurationPath) + "\n"; } else { MessageBox.Show( "Cannot switch from assembly '" + assemblyToProjectSwitch.FromAssemblyName + "' to project '" + assemblyToProjectSwitch.ToProjectPath + "' because project is not loaded. ", "Project not loaded", MessageBoxButton.OK, MessageBoxImage.Error); } } } if (SaveProjects) { project.Save(); } if (!string.IsNullOrEmpty(nuGetReferenceTransformationsForProject)) { File.AppendAllText(project.CurrentConfigurationPath, nuGetReferenceTransformationsForProject); } } }, token)); }