int IVsTrackBatchRetargetingEvents.OnBatchRetargetingEnd() { _errorListProvider.Tasks.Clear(); if (_platformRetargetingProject != null) { try { Project project = _dte.Solution.Item(_platformRetargetingProject); if (project != null) { string frameworkName = project.GetTargetFramework(); if (NETCore451.Equals(frameworkName, StringComparison.OrdinalIgnoreCase) || Windows81.Equals(frameworkName, StringComparison.OrdinalIgnoreCase)) { IList <IPackage> packagesToBeReinstalled = ProjectRetargetingUtility.GetPackagesToBeReinstalled(project); if (packagesToBeReinstalled.Count > 0) { // By asserting that NuGet is in use, we are also asserting that NuGet.VisualStudio.dll is already loaded // Hence, it is okay to call project.ToVsHierarchy() Debug.Assert(project.IsNuGetInUse()); IVsHierarchy projectHierarchy = project.ToVsHierarchy(); ShowRetargetingErrorTask(packagesToBeReinstalled.Select(p => p.Id), projectHierarchy, TaskErrorCategory.Error, TaskPriority.High); } ProjectRetargetingUtility.MarkPackagesForReinstallation(project, packagesToBeReinstalled); } } } catch (ArgumentException) { // If the solution does not contain a project named '_platformRetargetingProject', it will throw ArgumentException } _platformRetargetingProject = null; } return(VSConstants.S_OK); }
public static void MarkPackagesForReinstallationMarksPackagesProperly() { // Arrange var config = @"<?xml version=""1.0"" encoding=""utf-8""?> <packages> <package id=""A"" version=""1.0"" targetFramework=""net30""/> <package id=""B"" version=""1.0""/> <package id=""C"" version=""1.0"" targetFramework=""net40""/> </packages>"; var fileSystem = new MockFileSystem(); fileSystem.AddFile("packages.config", config); var packageReferenceFile = new PackageReferenceFile(fileSystem, "packages.config"); IList <IPackage> packagesToBeReinstalled = new List <IPackage>() { PackageUtility.CreatePackage("A", "1.0"), PackageUtility.CreatePackage("C", "1.0") }; // Act ProjectRetargetingUtility.MarkPackagesForReinstallation(packageReferenceFile, packagesToBeReinstalled); var packageReferences = packageReferenceFile.GetPackageReferences().ToList(); // Assert Assert.Equal(3, packageReferences.Count); Assert.Equal("A", packageReferences[0].Id); Assert.Equal("B", packageReferences[1].Id); Assert.Equal("C", packageReferences[2].Id); Assert.True(packageReferences[0].RequireReinstallation); Assert.False(packageReferences[1].RequireReinstallation); Assert.True(packageReferences[2].RequireReinstallation); }
int IVsTrackProjectRetargetingEvents.OnRetargetingAfterChange(string projRef, IVsHierarchy pAfterChangeHier, string fromTargetFramework, string toTargetFramework) { _errorListProvider.Tasks.Clear(); Project retargetedProject = VsUtility.GetProjectFromHierarchy(pAfterChangeHier); if (retargetedProject != null) { IList <IPackage> packagesToBeReinstalled = ProjectRetargetingUtility.GetPackagesToBeReinstalled(retargetedProject); if (!packagesToBeReinstalled.IsEmpty()) { ShowRetargetingErrorTask(packagesToBeReinstalled.Select(p => p.Id), pAfterChangeHier, TaskErrorCategory.Error, TaskPriority.High); } ProjectRetargetingUtility.MarkPackagesForReinstallation(retargetedProject, packagesToBeReinstalled); } return(VSConstants.S_OK); }