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);
 }
Exemplo n.º 2
0
        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);
        }