protected virtual void AddFileCore(string path, Action addFileAction) { if (string.IsNullOrEmpty(path)) { return; } bool fileExistsInProject = FileExistsInProject(path); string fileName = Path.GetFileName(path); string lockFileFullPath = PackagesConfigLockFileUtility.GetPackagesLockFilePath(ProjectFullPath, GetPropertyValue("NuGetLockFilePath")?.ToString(), ProjectName); if (File.Exists(Path.Combine(ProjectFullPath, path)) && !fileExistsInProject && !fileName.Equals(Constants.PackageReferenceFile) && !fileName.Equals("packages." + ProjectName + ".config") && !fileName.Equals("web.config") && !fileName.Equals("app.config") && !fileName.Equals(Path.GetFileName(lockFileFullPath))) { NuGetProjectContext.Log(MessageLevel.Warning, "File already exists", path); return; } addFileAction?.Invoke(); if (!fileExistsInProject) { AddFileToProject(path); } }
private void ValidatePackagesConfigLockFiles(IEnumerable <NuGetProject> allProjects, CancellationToken token) { var pcProjects = allProjects.Where(p => p.ProjectStyle == ProjectModel.ProjectStyle.PackagesConfig); foreach (MSBuildNuGetProject project in pcProjects) { string projectFile = project.MSBuildProjectPath; string pcFile = project.PackagesConfigNuGetProject.FullPath; var projectName = (string)project.GetMetadataOrNull("Name"); var lockFileName = (string)project.GetMetadataOrNull("NuGetLockFilePath"); var restorePackagesWithLockFile = (string)project.GetMetadataOrNull("RestorePackagesWithLockFile"); var projectTfm = (NuGetFramework)project.GetMetadataOrNull("TargetFramework"); bool restoreLockedMode = MSBuildStringUtility.GetBooleanOrNull((string)project.GetMetadataOrNull("LockedMode")) ?? false; IReadOnlyList <IRestoreLogMessage> validationLogs = PackagesConfigLockFileUtility.ValidatePackagesConfigLockFiles( projectFile, pcFile, projectName, lockFileName, restorePackagesWithLockFile, projectTfm, project.FolderNuGetProject.Root, restoreLockedMode, token); if (validationLogs != null) { foreach (var logItem in validationLogs) { _logger.Log(logItem); } } } }
public void ApplyChanges_AddInstalledPackage() { // Arrange var lockFile = new PackagesLockFile { Targets = new List <PackagesLockFileTarget> { new PackagesLockFileTarget() } }; var actionList = new List <NuGetProjectAction> { NuGetProjectAction.CreateInstallProjectAction(new PackageIdentity("packageA", NuGetVersion.Parse("1.0.0")), null, null) }; var contentHashUtility = new Mock <IPackagesConfigContentHashProvider>(); // Act PackagesConfigLockFileUtility.ApplyChanges(lockFile, actionList, contentHashUtility.Object, CancellationToken.None); // Assert Assert.Equal(1, lockFile.Targets[0].Dependencies.Count); Assert.Equal(actionList[0].PackageIdentity.Id, lockFile.Targets[0].Dependencies[0].Id); Assert.Equal(actionList[0].PackageIdentity.Version, lockFile.Targets[0].Dependencies[0].ResolvedVersion); }
private void ValidatePackagesConfigLockFiles(IReadOnlyList <string> packagesConfigFiles, IReadOnlyList <PackageSpec> projects, string packagesFolderPath, List <RestoreSummary> restoreSummaries) { foreach (var pcFile in packagesConfigFiles) { var dgSpec = projects?.FirstOrDefault(p => { if (p.RestoreMetadata is PackagesConfigProjectRestoreMetadata pcRestoreMetadata) { return(StringComparer.OrdinalIgnoreCase.Equals(pcRestoreMetadata.PackagesConfigPath, pcFile)); } return(false); }); var projectFile = dgSpec?.FilePath ?? pcFile; var projectTfm = dgSpec?.TargetFrameworks.SingleOrDefault()?.FrameworkName ?? NuGetFramework.AnyFramework; var restoreLockedMode = LockedMode || (dgSpec?.RestoreMetadata?.RestoreLockProperties?.RestoreLockedMode ?? false); var lockFilePath = LockFilePath ?? dgSpec?.RestoreMetadata?.RestoreLockProperties?.NuGetLockFilePath; var useLockFile = UseLockFile ? bool.TrueString : dgSpec?.RestoreMetadata?.RestoreLockProperties?.RestorePackagesWithLockFile; IReadOnlyList <IRestoreLogMessage> result = PackagesConfigLockFileUtility.ValidatePackagesConfigLockFiles( projectFile, pcFile, dgSpec?.Name, lockFilePath, useLockFile, projectTfm, packagesFolderPath, restoreLockedMode, CancellationToken.None); if (result != null) { restoreSummaries.Add(new RestoreSummary( success: false, inputPath: projectFile, configFiles: Array.Empty <string>(), feedsUsed: Array.Empty <string>(), installCount: 0, errors: result)); } } }
public void ApplyChanges_SortPackages_LastPackage() { // Arrange var lockFile = new PackagesLockFile { Targets = new List <PackagesLockFileTarget> { new PackagesLockFileTarget { Dependencies = new List <LockFileDependency> { new LockFileDependency { Id = "packageB", ResolvedVersion = NuGetVersion.Parse("1.0.0") }, new LockFileDependency { Id = "packageD", ResolvedVersion = NuGetVersion.Parse("1.0.0") } } } } }; var actionList = new List <NuGetProjectAction> { NuGetProjectAction.CreateInstallProjectAction(new PackageIdentity("packageE", NuGetVersion.Parse("1.0.0")), null, null) }; var contentHashUtility = new Mock <IPackagesConfigContentHashProvider>(); // Act PackagesConfigLockFileUtility.ApplyChanges(lockFile, actionList, contentHashUtility.Object, CancellationToken.None); // Assert Assert.Equal(3, lockFile.Targets[0].Dependencies.Count); Assert.Equal("packageB", lockFile.Targets[0].Dependencies[0].Id); Assert.Equal("packageD", lockFile.Targets[0].Dependencies[1].Id); Assert.Equal("packageE", lockFile.Targets[0].Dependencies[2].Id); }
public void GetPackagesLockFilePath_PackagesLockJson() { // Arrange var projectName = "testproj"; var logger = new TestLogger(); using (var rootFolder = TestDirectory.Create()) { var projectFolder = new DirectoryInfo(Path.Combine(rootFolder, projectName)); var targetFramework = NuGetFramework.Parse("net46"); var msBuildNuGetProjectSystem = new TestMSBuildNuGetProjectSystem(targetFramework, new TestNuGetProjectContext(), projectFolder.FullName); var project = new TestMSBuildNuGetProject(msBuildNuGetProjectSystem, rootFolder, projectFolder.FullName); // Act var lockFile = PackagesConfigLockFileUtility.GetPackagesLockFilePath(project); // Assert Assert.Equal(Path.Combine(projectFolder.FullName, "packages.lock.json"), lockFile); } }
private Task AddFileCoreAsync(string path, Action addFile) { // Do not try to add file to project, if the path is null or empty. if (string.IsNullOrEmpty(path)) { return(Task.FromResult(false)); } var fileExistsInProject = FileExistsInProject(path); // If the file exists on disk but not in the project then skip it. // One exception is the 'packages.config' file, in which case we want to include // it into the project. // Other exceptions are 'web.config' and 'app.config' var fileName = Path.GetFileName(path); var lockFileFullPath = PackagesConfigLockFileUtility.GetPackagesLockFilePath(ProjectFullPath, GetPropertyValue("NuGetLockFilePath")?.ToString(), ProjectName); if (File.Exists(Path.Combine(ProjectFullPath, path)) && !fileExistsInProject && !fileName.Equals(ProjectManagement.Constants.PackageReferenceFile) && !fileName.Equals("packages." + ProjectName + ".config") && !fileName.Equals(EnvDTEProjectInfoUtility.WebConfig) && !fileName.Equals(EnvDTEProjectInfoUtility.AppConfig) && !fileName.Equals(Path.GetFileName(lockFileFullPath)) ) { NuGetProjectContext.Log(ProjectManagement.MessageLevel.Warning, Strings.Warning_FileAlreadyExists, path); } else { EnvDTEProjectUtility.EnsureCheckedOutIfExists(VsProjectAdapter.Project, ProjectFullPath, path); addFile(); if (!fileExistsInProject) { return(AddFileToProjectAsync(path)); } } return(Task.FromResult(false)); }
public void GetPackagesLockFilePath_MsbuildProperty() { // Arrage var projectName = "testproj"; var logger = new TestLogger(); var expected = "somewhere\\my.lock.json"; using (var rootFolder = TestDirectory.Create()) { var projectFolder = new DirectoryInfo(Path.Combine(rootFolder, projectName)); var targetFramework = NuGetFramework.Parse("net46"); var msBuildNuGetProjectSystem = new TestMSBuildNuGetProjectSystem(targetFramework, new TestNuGetProjectContext(), projectFolder.FullName); var project = new TestMSBuildNuGetProject(msBuildNuGetProjectSystem, rootFolder, projectFolder.FullName); msBuildNuGetProjectSystem.SetPropertyValue("NuGetLockFilePath", expected); // Act var lockFile = PackagesConfigLockFileUtility.GetPackagesLockFilePath(project); // Assert Assert.Equal(Path.Combine(projectFolder.FullName, expected), lockFile); } }