Esempio n. 1
0
        /// <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));
        }