public override Task <(IReadOnlyList <PackageSpec> dgSpecs, IReadOnlyList <IAssetsLogMessage> additionalMessages)> GetPackageSpecsAndAdditionalMessagesAsync(DependencyGraphCacheContext context) { DependencyGraphSpec dgSpec = DependencyGraphSpecTestUtilities.CreateMinimalDependencyGraphSpec(ProjectFullPath, MSBuildProjectPath); List <PackageSpec> packageSpecs = new List <PackageSpec>(); packageSpecs.Add(dgSpec.GetProjectSpec(ProjectFullPath)); (IReadOnlyList <PackageSpec>, IReadOnlyList <IAssetsLogMessage>)result = (packageSpecs, null); return(Task.FromResult(result)); }
public async Task RestoreAsync_WithMinimalProjectAndAdditionalErrorMessage_WritesErrorsToAssetsFile() { // Arrange var projectName = "testproj"; var logger = new TestLogger(); using (var rootFolder = TestDirectory.Create()) { var projectFolder = new DirectoryInfo(Path.Combine(rootFolder, projectName)); projectFolder.Create(); var objFolder = projectFolder.CreateSubdirectory("obj"); var msbuildProjectPath = new FileInfo(Path.Combine(projectFolder.FullName, $"{projectName}.csproj")); var globalPackagesFolder = Path.Combine(rootFolder, "gpf"); var sources = new SourceRepository[0]; var restoreContext = new DependencyGraphCacheContext(logger, NullSettings.Instance); var solutionManager = new Mock <ISolutionManager>(); var restoreCommandProvidersCache = new RestoreCommandProvidersCache(); // When a VS nomination results in an exception, we use this minimal DGSpec to do a restore. var dgSpec = DependencyGraphSpecTestUtilities.CreateMinimalDependencyGraphSpec(msbuildProjectPath.FullName, objFolder.FullName); dgSpec.AddRestore(dgSpec.Projects[0].FilePath); // CpsPackageReferenceProject sets some additional properties, from settings, in GetPackageSpecsAndAdditionalMessages(...) dgSpec.Projects[0].RestoreMetadata.PackagesPath = globalPackagesFolder; // Having an "additional" error message is also critical var restoreLogMessage = new RestoreLogMessage(LogLevel.Error, NuGetLogCode.NU1000, "Test error") { FilePath = msbuildProjectPath.FullName, ProjectPath = msbuildProjectPath.FullName }; var additionalMessages = new List <IAssetsLogMessage>() { AssetsLogMessage.Create(restoreLogMessage) }; // Act await DependencyGraphRestoreUtility.RestoreAsync( dgSpec, restoreContext, restoreCommandProvidersCache, cacheContextModifier : _ => { }, sources, parentId : Guid.Empty, forceRestore : false, isRestoreOriginalAction : true, additionalMessages, progressReporter : null, logger, CancellationToken.None); // Assert var assetsFilePath = Path.Combine(objFolder.FullName, "project.assets.json"); Assert.True(File.Exists(assetsFilePath), "Assets file does not exist"); LockFile assetsFile = new LockFileFormat().Read(assetsFilePath); IAssetsLogMessage actualMessage = Assert.Single(assetsFile.LogMessages); Assert.Equal(restoreLogMessage.Level, actualMessage.Level); Assert.Equal(restoreLogMessage.Code, actualMessage.Code); Assert.Equal(restoreLogMessage.Message, actualMessage.Message); } }