public Task MsbuildRestore_WithStaticGraphRestore_MessageLoggedAtDefaultVerbosityWhenThereAreNoProjectsToRestore() { using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var project = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); solution.Projects.Add(project); solution.Create(pathContext.SolutionRoot); var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot} /p:RestoreUseStaticGraphEvaluation=true", ignoreExitCode: true); result.Success.Should().BeTrue(because: result.AllOutput); result.AllOutput.Should().Contain("The solution did not have any projects to restore, ensure that all projects are known to " + "be MSBuild and that the projects exist.", because: result.AllOutput); } return(Task.CompletedTask); }
public static PackageReferenceArgs GetPackageReferenceArgs(string packageId, SimpleTestProjectContext project) { var logger = new TestCommandOutputLogger(); var packageDependency = new PackageDependency(packageId); return(new PackageReferenceArgs(project.ProjectPath, packageDependency, logger)); }
public Task MsbuildRestore_WithStaticGraphRestore_MessageLoggedAtDefaultVerbosityWhenAProjectIsNotKnownToMSBuild() { using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var project = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); solution.Projects.Add(project); solution.Create(pathContext.SolutionRoot); string newSlnFileContent = File.ReadAllText(solution.SolutionPath); newSlnFileContent = newSlnFileContent.Replace("FAE04EC0-301F-11D3-BF4B-00C04F79EFBC", Guid.Empty.ToString()); File.WriteAllText(solution.SolutionPath, newSlnFileContent); var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot} /p:RestoreUseStaticGraphEvaluation=true", ignoreExitCode: true); result.Success.Should().BeTrue(because: result.AllOutput); result.AllOutput.Should().Contain($"The solution contains '{solution.Projects.Count}' project(s) '{project.ProjectName}' that are not known to MSBuild. " + "Ensure that all projects are known to be MSBuild before running restore on the solution.", because: result.AllOutput); } return(Task.CompletedTask); }
public async Task AddPkg_V3LocalSourceFeed_WithRelativePath_VersionSpecified_Fail() { using (var pathContext = new SimpleTestPathContext()) { var projectName = "projectA"; var targetFrameworks = "net5.0"; SimpleTestProjectContext projectA = XPlatTestUtils.CreateProject(projectName, pathContext, targetFrameworks); var packageX = "packageX"; var packageX_V1 = new PackageIdentity(packageX, new NuGetVersion("1.0.0")); var packageX_V2 = new PackageIdentity(packageX, new NuGetVersion("2.0.0")); var packageFrameworks = "net472; netcoreapp2.0"; var packageX_V1_Context = XPlatTestUtils.CreatePackage(packageX_V1.Id, packageX_V1.Version.Version.ToString(), frameworkString: packageFrameworks); var customSourcePath = Path.Combine(pathContext.WorkingDirectory, "Custompackages"); var sourceRelativePath = Path.Combine("..", "..", "Custompackages"); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3Async( customSourcePath, PackageSaveMode.Defaultv3, new SimpleTestPackageContext[] { packageX_V1_Context }); var projectDirectory = Path.Combine(pathContext.SolutionRoot, projectName); var projectFilePath = Path.Combine(projectDirectory, $"{projectName}.csproj"); // Act CommandRunnerResult result = _fixture.RunDotnet(projectDirectory, $"add {projectFilePath} package {packageX} -s {sourceRelativePath} -v {packageX_V2.Version}", ignoreExitCode: true); // Assert result.Success.Should().BeFalse(because: result.AllOutput); } }
public async Task GivenAPackageWithAHigherMinClientVersionVerifyErrorCodeDisplayedAsync() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateNETCore( "a", pathContext.SolutionRoot, NuGetFramework.Parse("NETStandard1.5")); var packageB = new SimpleTestPackageContext("b", "1.0.0") { MinClientVersion = "99.0.0" }; await SimpleTestPackageUtility.CreatePackagesAsync(pathContext.PackageSource, packageB); projectA.AddPackageToAllFrameworks(packageB); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); // Act var r = Util.Restore(pathContext, projectA.ProjectPath, expectedExitCode: 1); var output = r.Item2 + " " + r.Item3; // Assert Assert.Contains("NU1401", output, StringComparison.OrdinalIgnoreCase); } }
public async Task Restore_LegacyPackageReference_P2P_SkipBuildTransitive() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); projectA.Properties.Add("RestoreProjectStyle", "PackageReference"); var projectB = SimpleTestProjectContext.CreateLegacyPackageReference( "b", pathContext.SolutionRoot, net461); var packageY = new SimpleTestPackageContext() { Id = "y", Version = "1.0.0" }; packageY.Files.Clear(); packageY.AddFile("lib/net461/y.dll"); packageY.AddFile("build/y.targets"); packageY.AddFile("buildCrossTargeting/y.targets"); packageY.AddFile("buildTransitive/y.targets"); packageY.PrivateAssets = "buildTransitive"; projectB.AddPackageToAllFrameworks(packageY); projectA.AddProjectToAllFrameworks(projectB); solution.Projects.Add(projectA); solution.Projects.Add(projectB); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageY); // Act var result = RunRestore(pathContext); // Assert var assetsFile = projectA.AssetsFile; Assert.NotNull(assetsFile); foreach (var target in assetsFile.Targets) { var library = target.Libraries.FirstOrDefault(lib => lib.Name.Equals("y")); Assert.NotNull(library); Assert.False(library.Build.Any(build => build.Path.Equals("buildTransitive/y.targets"))); } } }
public async Task RestoreUAP_VerifyProjectToProjectRestore() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, NuGetFramework.AnyFramework); var projectB = SimpleTestProjectContext.CreateLegacyPackageReference( "b", pathContext.SolutionRoot, NuGetFramework.AnyFramework); projectA.Properties.Add("TargetPlatformIdentifier", "UAP"); projectA.Properties.Add("TargetPlatformVersion", "10.0.14393.0"); projectA.Properties.Add("TargetPlatformMinVersion", "10.0.10586.0"); // Set style for A since it has no references projectA.Properties.Add("RestoreProjectStyle", "PackageReference"); projectB.Properties.Add("TargetPlatformIdentifier", "UAP"); projectB.Properties.Add("TargetPlatformVersion", "10.0.14393.0"); projectB.Properties.Add("TargetPlatformMinVersion", "10.0.10586.0"); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; projectB.AddPackageToAllFrameworks(packageX); projectA.AddProjectToAllFrameworks(projectB); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Act var r = RestoreSolution(pathContext); var dgPath = Path.Combine(pathContext.WorkingDirectory, "out.dg"); var dgSpec = DependencyGraphSpec.Load(dgPath); var assetsFile = projectA.AssetsFile; // Assert Assert.Equal("1.0.0", assetsFile.Libraries.Single(p => p.Name == "x").Version.ToNormalizedString()); } }
public async Task RestorePackagesConfig_WithExistingLockFile_LockedMode_Succeeds() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/x.dll"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); Util.CreateFile(Path.GetDirectoryName(projectA.ProjectPath), "packages.config", @"<packages> <package id=""x"" version=""1.0.0"" targetFramework=""net461"" /> </packages>"); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Preconditions, regular restore var result = RunRestore(pathContext, _successExitCode); result.Success.Should().BeTrue(because: result.AllOutput); new FileInfo(projectA.NuGetLockFileOutputPath).Exists.Should().BeFalse(); // Write expected lock file var packagePath = LocalFolderUtility.GetPackagesV3(pathContext.PackageSource, NullLogger.Instance).Single().Path; string contentHash = null; using (var reader = new PackageArchiveReader(packagePath)) { contentHash = reader.GetContentHash(CancellationToken.None); } var expectedLockFile = GetResource("NuGet.CommandLine.FuncTest.compiler.resources.pc.packages.lock.json").Replace("TEMPLATE", contentHash); File.WriteAllText(projectA.NuGetLockFileOutputPath, expectedLockFile); // Run lockedmode restore. result = RunRestore(pathContext, _successExitCode, "-LockedMode"); result.Success.Should().BeTrue(because: result.AllOutput); new FileInfo(projectA.NuGetLockFileOutputPath).Exists.Should().BeTrue(); } }
public async Task Restore_LegacyPackageReference_WithNuGetLockFileLockedMode() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/a.dll"); var packageY = new SimpleTestPackageContext() { Id = "y", Version = "1.0.0" }; packageY.Files.Clear(); packageY.AddFile("lib/net461/y.dll"); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX, packageY); var result = RunRestore(pathContext, _successExitCode, "-UseLockFile"); Assert.True(result.Success); Assert.True(File.Exists(projectA.NuGetLockFileOutputPath)); projectA.AddPackageToAllFrameworks(packageY); projectA.Save(); // Act result = RunRestore(pathContext, _failureExitCode, "-LockedMode"); // Assert Assert.Contains("NU1004:", result.Errors); var logCodes = projectA.AssetsFile.LogMessages.Select(e => e.Code); Assert.Contains(NuGetLogCode.NU1004, logCodes); } }
public static bool ValidateAssetsFile(SimpleTestProjectContext project, string packageId) { if (!File.Exists(project.AssetsFileOutputPath)) { return(false); } return(project.AssetsFile.Targets.Any(t => t.Libraries.Any(library => string.Equals(library.Name, packageId, StringComparison.OrdinalIgnoreCase)))); }
public async Task MsbuildRestore_PackageReferenceDependencyCsProjAsync() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = new SimpleTestProjectContext( "a", ProjectStyle.PackageReference, pathContext.SolutionRoot); projectA.Frameworks.Add(new SimpleTestProjectFrameworkContext(net461)); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); projectA.AddPackageToAllFrameworks(packageX); packageX.AddFile("lib/net461/a.dll"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); var configAPath = Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), "NuGet.Config"); var configText = $@"<?xml version=""1.0"" encoding=""utf-8""?> <configuration> <packageSources> <add key=""LocalSource"" value=""{pathContext.PackageSource}"" /> </packageSources> </configuration>"; using (var writer = new StreamWriter(configAPath)) { writer.Write(configText); } await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageX); // Act var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {projectA.ProjectPath}", ignoreExitCode: true); // Assert Assert.True(result.ExitCode == 0, result.AllOutput); var resolver = new VersionFolderPathResolver(pathContext.UserPackagesFolder); var nupkg = NupkgMetadataFileFormat.Read(resolver.GetNupkgMetadataPath(packageX.Id, NuGetVersion.Parse(packageX.Version)), NullLogger.Instance); Assert.Contains($"Installed x 1.0.0 from {pathContext.PackageSource} with content hash {nupkg.ContentHash}.", result.AllOutput); Assert.Contains(configAPath, result.AllOutput); } }
public static string CreateDGFileForProject(SimpleTestProjectContext project) { var dgSpec = new DependencyGraphSpec(); var dgFilePath = Path.Combine(Directory.GetParent(project.ProjectPath).FullName, "temp.dg"); dgSpec.AddRestore(project.ProjectName); dgSpec.AddProject(project.PackageSpec); dgSpec.Save(dgFilePath); return(dgFilePath); }
public async Task Restore_TamperedPackage_FailsAsync() { // Arrange var nupkg = new SimpleTestPackageContext("A", "1.0.0"); using (var pathContext = new SimpleTestPathContext()) using (var testCertificate = new X509Certificate2(_trustedTestCert.Source.Cert)) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateNETCore( "a", pathContext.SolutionRoot, NuGetFramework.Parse("NETStandard2.0")); var packageX = new SimpleTestPackageContext("X", "9.0.0"); var signedPackagePath = await SignedArchiveTestUtility.AuthorSignPackageAsync(testCertificate, packageX, pathContext.PackageSource); SignedArchiveTestUtility.TamperWithPackage(signedPackagePath); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); var args = new string[] { projectA.ProjectPath, "-Source", pathContext.PackageSource }; // Act var result = RunRestore(_nugetExePath, pathContext, expectedExitCode: 1, additionalArgs: args); var reader = new LockFileFormat(); var lockFile = reader.Read(projectA.AssetsFileOutputPath); var errors = lockFile.LogMessages.Where(m => m.Level == LogLevel.Error); var warnings = lockFile.LogMessages.Where(m => m.Level == LogLevel.Warning); // Assert result.ExitCode.Should().Be(1); result.Errors.Should().Contain(_NU3008); result.AllOutput.Should().Contain($"WARNING: {_NU3027}"); errors.Count().Should().Be(1); errors.First().Code.Should().Be(NuGetLogCode.NU3008); errors.First().Message.Should().Be(_NU3008Message); errors.First().LibraryId.Should().Be(packageX.ToString()); warnings.Count().Should().Be(1); warnings.First().Code.Should().Be(NuGetLogCode.NU3027); warnings.First().Message.Should().Be(_NU3027Message); warnings.First().LibraryId.Should().Be("X.9.0.0"); } }
public async Task MsbuildRestore_WithRelativeSource_ResolvesAgainstCurrentWorkingDirectory(bool isStaticGraphRestore) { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var project = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); project.AddPackageToAllFrameworks(packageX); packageX.AddFile("lib/net461/a.dll"); solution.Projects.Add(project); solution.Create(pathContext.SolutionRoot); var relativePath = "relativeSource"; var relativeSource = Path.Combine(pathContext.WorkingDirectory, relativePath); await SimpleTestPackageUtility.CreateFolderFeedV3Async( relativeSource, packageX); var projectOutputPaths = new[] { project.AssetsFileOutputPath, project.PropsOutput, project.TargetsOutput, project.CacheFileOutputPath, }; // Restore the project with a PackageReference which generates assets var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {project.ProjectPath} /p:RestoreSources=\"{relativePath}\"" + (isStaticGraphRestore ? " /p:RestoreUseStaticGraphEvaluation=true" : string.Empty), ignoreExitCode: true); result.Success.Should().BeTrue(because: result.AllOutput); foreach (var asset in projectOutputPaths) { new FileInfo(asset).Exists.Should().BeTrue(because: result.AllOutput); } } }
public async Task RestoreUAP_VerifyNoContentFiles() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, NuGetFramework.AnyFramework); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.AddFile("contentFiles/any/any/a.txt"); projectA.AddPackageToAllFrameworks(packageX); projectA.Properties.Add("TargetPlatformIdentifier", "UAP"); projectA.Properties.Add("TargetPlatformVersion", "10.0.14393.0"); projectA.Properties.Add("TargetPlatformMinVersion", "10.0.10586.0"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Act var r = RestoreSolution(pathContext); var dgPath = Path.Combine(pathContext.WorkingDirectory, "out.dg"); var dgSpec = DependencyGraphSpec.Load(dgPath); var propsXML = XDocument.Load(projectA.PropsOutput); var styleNode = propsXML.Root.Elements().First().Elements(XName.Get("NuGetProjectStyle", "http://schemas.microsoft.com/developer/msbuild/2003")).FirstOrDefault(); var projectSpec = dgSpec.Projects.Single(); // Assert Assert.Equal(ProjectStyle.PackageReference, projectSpec.RestoreMetadata.ProjectStyle); Assert.Equal("PackageReference", styleNode.Value); Assert.Equal(NuGetFramework.Parse("UAP10.0.10586.0"), projectSpec.TargetFrameworks.Single().FrameworkName); Assert.DoesNotContain("a.txt", propsXML.ToString()); } }
public async Task MsbuildRestore_WithCPPCliVcxproj_WithAssetTargetFallback_Succeeds() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set-up packages var packageNative = new SimpleTestPackageContext("native", "1.0.0"); packageNative.AddFile("build/native/native.targets"); packageNative.AddFile("lib/native/native.dll"); var packageManaged = new SimpleTestPackageContext("managed", "1.0.0"); packageManaged.AddFile("build/net472/managed.targets"); packageManaged.AddFile("lib/net472/managed.dll"); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageNative, packageManaged); // Set up project var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var framework = NuGetFramework.Parse("net5.0-windows7.0"); var projectA = SimpleTestProjectContext.CreateNETCore("projectName", pathContext.SolutionRoot, framework); projectA.Properties.Add("CLRSupport", "NetCore"); projectA.Properties.Add("AssetTargetFallback", "net472"); //update path to vcxproj projectA.ProjectPath = Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), projectA.ProjectName + ".vcxproj"); projectA.AddPackageToAllFrameworks(packageNative); projectA.AddPackageToAllFrameworks(packageManaged); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); // Act var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot}"); // Assert result.Success.Should().BeTrue(because: result.AllOutput); File.Exists(projectA.AssetsFileOutputPath).Should().BeTrue(because: result.AllOutput); File.Exists(projectA.TargetsOutput).Should().BeTrue(because: result.AllOutput); File.Exists(projectA.PropsOutput).Should().BeTrue(because: result.AllOutput); var targetsSection = projectA.AssetsFile.Targets.First(e => string.IsNullOrEmpty(e.RuntimeIdentifier)); targetsSection.Libraries.Should().Contain(e => e.Name.Equals("native"), because: string.Join(",", targetsSection.Libraries)); targetsSection.Libraries.Should().Contain(e => e.Name.Equals("managed"), because: string.Join(",", targetsSection.Libraries)); var native = targetsSection.Libraries.First(e => e.Name.Equals("native")); native.CompileTimeAssemblies.Should().Contain("lib/native/native.dll"); native.Build.Should().Contain("build/native/native.targets"); var managed = targetsSection.Libraries.First(e => e.Name.Equals("managed")); managed.CompileTimeAssemblies.Should().Contain("lib/net472/managed.dll"); managed.Build.Should().Contain("build/net472/managed.targets"); } }
public async Task MsbuildRestore_InsecurePackagesConfigDependencyAsync_Throws() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); NuGetFramework net461 = NuGetFramework.Parse("net461"); var projectA = new SimpleTestProjectContext( "a", ProjectStyle.PackagesConfig, pathContext.SolutionRoot); projectA.Frameworks.Add(new SimpleTestProjectFrameworkContext(net461)); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/a.dll"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); using (var writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), "packages.config"))) { writer.Write( @"<!DOCTYPE package [ <!ENTITY greeting ""Hello""> <!ENTITY name ""NuGet Client ""> <!ENTITY sayhello ""&greeting; &name;""> ]> <packages> <package id=""&sayhello;"" version=""1.1.0"" targetFramework=""net45"" /> <package id=""x"" version=""1.0.0"" targetFramework=""net45"" /> </packages>"); } await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageX); // Act CommandRunnerResult result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot} /p:RestorePackagesConfig=true", ignoreExitCode: true); // Assert Assert.Equal(1, result.ExitCode); Assert.Contains("Error parsing packages.config file", result.AllOutput); } }
public async Task Restore_LegacyPackageReference_ForceEvaluateNuGetLockFile(bool forceEvaluate) { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/a.dll"); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var result = RunRestore(pathContext, _successExitCode, "-UseLockFile"); Assert.True(File.Exists(projectA.NuGetLockFileOutputPath)); // Act result = forceEvaluate ? RunRestore(pathContext, _successExitCode, "-UseLockFile", "-ForceEvaluate") : RunRestore(pathContext, _successExitCode, "-UseLockFile"); // Assert Assert.Contains("Assets file has not changed.", result.AllOutput); if (forceEvaluate) { Assert.Contains("Writing packages lock file at disk.", result.AllOutput); } else { Assert.Contains("No-Op restore.", result.AllOutput); } } }
public static SimpleTestProjectContext CreateProject(string projectName, SimpleTestPathContext pathContext, string projectFrameworks) { var project = SimpleTestProjectContext.CreateNETCoreWithSDK( projectName: projectName, solutionRoot: pathContext.SolutionRoot, isToolingVersion15: true, frameworks: MSBuildStringUtility.Split(projectFrameworks)); project.Save(); return(project); }
public async Task Restore_TamperedPackageInPackagesConfig_FailsWithErrorAsync() { // Arrange var nupkg = new SimpleTestPackageContext("A", "1.0.0"); var packagesConfigContent = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<packages>" + " <package id=\"X\" version=\"9.0.0\" targetFramework=\"net461\" />" + "</packages>"; using (var pathContext = new SimpleTestPathContext()) using (var testCertificate = new X509Certificate2(_trustedTestCert.Source.Cert)) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = new SimpleTestProjectContext( "a", ProjectStyle.PackagesConfig, pathContext.SolutionRoot); var packageX = new SimpleTestPackageContext("X", "9.0.0"); var signedPackagePath = await SignedArchiveTestUtility.AuthorSignPackageAsync(testCertificate, packageX, pathContext.PackageSource); SignedArchiveTestUtility.TamperWithPackage(signedPackagePath); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); var packagesConfigPath = Path.Combine(Directory.GetParent(projectA.ProjectPath).FullName, "packages.config"); File.WriteAllBytes(packagesConfigPath, Encoding.ASCII.GetBytes(packagesConfigContent)); var args = new string[] { projectA.ProjectPath, "-Source", pathContext.PackageSource, "-PackagesDirectory", "./packages" }; // Act var result = RunRestore(_nugetExePath, pathContext, expectedExitCode: 1, additionalArgs: args); // Assert result.ExitCode.Should().Be(1); result.Errors.Should().Contain(_NU3008); result.AllOutput.Should().Contain(_NU3027); } }
public async Task TestUtility_Solution() { using (var pathContext = new SimpleTestPathContext()) { // Arrange && Act var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateNETCore( "a", pathContext.SolutionRoot, NuGetFramework.Parse("net45")); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; var projectJson = JObject.Parse(@"{ 'dependencies': { }, 'frameworks': { 'net45': { } } }"); var projectB = SimpleTestProjectContext.CreateUAP( "b", pathContext.SolutionRoot, NuGetFramework.Parse("net45"), projectJson); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Projects.Add(projectB); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Assert Assert.True(File.Exists(Path.Combine(pathContext.SolutionRoot, "solution.sln"))); Assert.True(File.Exists(Path.Combine(pathContext.SolutionRoot, "a", "a.csproj"))); Assert.True(File.Exists(Path.Combine(pathContext.WorkingDirectory, "NuGet.Config"))); Assert.True(File.Exists(Path.Combine(pathContext.SolutionRoot, "b", "b.csproj"))); Assert.True(File.Exists(Path.Combine(pathContext.SolutionRoot, "b", "project.json"))); } }
public async Task MsbuildRestore_PackagesConfigDependency_WithHttpSource_Warns() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = new SimpleTestProjectContext( "a", ProjectStyle.PackagesConfig, pathContext.SolutionRoot); projectA.Frameworks.Add(new SimpleTestProjectFrameworkContext(net461)); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.AddFile("lib/net461/a.dll"); pathContext.Settings.AddSource("http-feed", "http://api.source/index.json"); pathContext.Settings.AddSource("https-feed", "https://api.source/index.json"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); using (var writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), "packages.config"))) { writer.Write( @"<packages> <package id=""x"" version=""1.0.0"" targetFramework=""net461"" /> </packages>"); } await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageX); // Act var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot} /p:RestorePackagesConfig=true", ignoreExitCode: true); // Assert Assert.True(result.ExitCode == 0, result.AllOutput); Assert.Contains("Added package 'x.1.0.0' to folder", result.AllOutput); Assert.Contains("You are running the 'restore' operation with an 'http' source, 'http://api.source/index.json'. Support for 'http' sources will be removed in a future version.", result.Output); } }
public async Task MsbuildRestore_WithStaticGraphAndRegularRestore_ErrorLoggedWhenOutputPathNotSpecified() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var project = new SimpleTestProjectContext("a", ProjectStyle.PackageReference, pathContext.SolutionRoot) { ProjectExtensionsPath = string.Empty, Properties = { // When these two properties are not defined, restore should fail with a clear error and not crash ["MSBuildProjectExtensionsPath"] = string.Empty, ["RestoreOutputPath"] = string.Empty }, SetMSBuildProjectExtensionsPath = false, SingleTargetFramework = true }; project.Frameworks.Add(new SimpleTestProjectFrameworkContext(net461)); var packageX = new SimpleTestPackageContext { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); project.AddPackageToAllFrameworks(packageX); packageX.AddFile("lib/net461/a.dll"); solution.Projects.Add(project); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageX); // Restore the project with a PackageReference which generates assets var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore /p:RestoreUseStaticGraphEvaluation=true {project.ProjectPath}", ignoreExitCode: true); result.Success.Should().BeFalse(because: result.AllOutput); result.AllOutput.Should().Contain($"error : Invalid restore input. Missing required property 'OutputPath' for project type 'PackageReference'. Input files: {project.ProjectPath}."); } }
public async Task Restore_LegacyPackageReference_EmbedInteropPackage() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/a.dll"); packageX.AddFile("embed/net461/a.dll"); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Act var result = RunRestore(pathContext); // Assert var assetsFile = projectA.AssetsFile; Assert.NotNull(assetsFile); foreach (var target in assetsFile.Targets) { var library = target.Libraries.FirstOrDefault(lib => lib.Name.Equals("x")); Assert.NotNull(library); Assert.True(library.EmbedAssemblies.Any(embed => embed.Path.Equals("embed/net461/a.dll"))); Assert.True(library.CompileTimeAssemblies.Any(embed => embed.Path.Equals("lib/net461/a.dll"))); Assert.True(library.RuntimeAssemblies.Any(embed => embed.Path.Equals("lib/net461/a.dll"))); } } }
public async Task Restore_LegacyPackageReference_WithNuGetLockFile() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, net461); projectA.Properties.Add("RestorePackagesWithLockFile", "true"); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/a.dll"); projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Act var result = RunRestore(pathContext); // Assert Assert.True(File.Exists(projectA.NuGetLockFileOutputPath)); var lockFile = PackagesLockFileFormat.Read(projectA.NuGetLockFileOutputPath); Assert.Equal(4, lockFile.Targets.Count); var targets = lockFile.Targets.Where(t => t.Dependencies.Count > 0).ToList(); Assert.Equal(1, targets.Count); Assert.Equal(".NETFramework,Version=v4.6.1", targets[0].Name); Assert.Equal(1, targets[0].Dependencies.Count); Assert.Equal("x", targets[0].Dependencies[0].Id); } }
public async Task RestoreUAP_VerifyTargetPlatformVersionIsUsed() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateLegacyPackageReference( "a", pathContext.SolutionRoot, NuGetFramework.AnyFramework); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; projectA.AddPackageToAllFrameworks(packageX); projectA.Properties.Add("TargetPlatformIdentifier", "UAP"); projectA.Properties.Add("TargetPlatformVersion", "10.0.14393.0"); projectA.Properties.Add("TargetPlatformMinVersion", ""); projectA.Properties.Add("RestoreProjectStyle", "PackageReference"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Act var r = RestoreSolution(pathContext); var propsXML = XDocument.Load(projectA.PropsOutput); var styleNode = propsXML.Root.Elements().First().Elements(XName.Get("NuGetProjectStyle", "http://schemas.microsoft.com/developer/msbuild/2003")).FirstOrDefault(); // Assert var assetsFile = projectA.AssetsFile; Assert.NotNull(assetsFile); Assert.Equal(ProjectStyle.PackageReference, assetsFile.PackageSpec.RestoreMetadata.ProjectStyle); Assert.Equal("PackageReference", styleNode.Value); Assert.Equal(NuGetFramework.Parse("UAP10.0.14393.0"), assetsFile.PackageSpec.TargetFrameworks.Single().FrameworkName); } }
public async Task MsbuildRestore_PackagesConfigIsOptInAsync() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = new SimpleTestProjectContext( "a", ProjectStyle.PackagesConfig, pathContext.SolutionRoot); projectA.Frameworks.Add(new SimpleTestProjectFrameworkContext(net461)); var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile("lib/net461/a.dll"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); using (var writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), "packages.config"))) { writer.Write( @"<packages> <package id=""x"" version=""1.0.0"" targetFramework=""net461"" /> </packages>"); } await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageX); // Act var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot}", ignoreExitCode: true); // Assert Assert.True(result.ExitCode == 0, result.AllOutput); Assert.Contains("Nothing to do. None of the projects specified contain packages to restore.", result.AllOutput); } }
public async Task MsbuildRestore_NoPackageSourceMappingsection_NoSourceRelatedLogMessage() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var net461 = NuGetFramework.Parse("net461"); var projectA = new SimpleTestProjectContext( "a", ProjectStyle.PackagesConfig, pathContext.SolutionRoot); projectA.Frameworks.Add(new SimpleTestProjectFrameworkContext(net461)); var projectAPackages = Path.Combine(pathContext.SolutionRoot, "packages"); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); using (var writer = new StreamWriter(Path.Combine(Path.GetDirectoryName(projectA.ProjectPath), "packages.config"))) { writer.Write( @"<packages> <package id=""Contoso.MVC.ASP"" version=""1.0.0"" targetFramework=""net461"" /> </packages>"); } var packageContosoMvcReal = new SimpleTestPackageContext() { Id = "Contoso.MVC.ASP", Version = "1.0.0" }; packageContosoMvcReal.AddFile("lib/net461/realA.dll"); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, packageContosoMvcReal); // Act var result = _msbuildFixture.RunMsBuild(pathContext.WorkingDirectory, $"/t:restore {pathContext.SolutionRoot} /p:RestorePackagesConfig=true", ignoreExitCode: true); // Assert result.Success.Should().BeTrue(because: result.AllOutput); result.AllOutput.Should().NotContain("source mapping"); } }
public async Task DotnetRestore_PackageReferenceWithAliases_ReflectedInTheAssetsFile() { using (var pathContext = _msbuildFixture.CreateSimpleTestPathContext()) { // Set up solution, and project var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projFramework = FrameworkConstants.CommonFrameworks.Net462; var projectA = SimpleTestProjectContext.CreateNETCore( "a", pathContext.SolutionRoot, projFramework); //Setup packages and feed var packageX = new SimpleTestPackageContext() { Id = "x", Version = "1.0.0" }; packageX.Files.Clear(); packageX.AddFile($"lib/{projFramework.GetShortFolderName()}/x.dll"); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); packageX.Aliases = "Core"; //add the packe to the project projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Create(pathContext.SolutionRoot); // Act var args = $" --source \"{pathContext.PackageSource}\" "; var projdir = Path.GetDirectoryName(projectA.ProjectPath); var projfilename = Path.GetFileNameWithoutExtension(projectA.ProjectName); _msbuildFixture.RestoreProject(projdir, projfilename, args); Assert.True(File.Exists(projectA.AssetsFileOutputPath)); var library = projectA.AssetsFile.Targets.First(e => e.RuntimeIdentifier == null).Libraries.First(); library.Should().NotBeNull("The assets file is expect to have a single library"); library.CompileTimeAssemblies.Count.Should().Be(1, because: "The package has 1 compatible file"); library.CompileTimeAssemblies.Single().Properties.Should().Contain(new KeyValuePair <string, string>(LockFileItem.AliasesProperty, "Core")); } }
public async Task GivenAProjectIsUsedOverAPackageVerifyNoDowngradeWarningAsync() { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Set up solution, project, and packages var solution = new SimpleTestSolutionContext(pathContext.SolutionRoot); var projectA = SimpleTestProjectContext.CreateNETCore( "a", pathContext.SolutionRoot, NuGetFramework.Parse("NETStandard1.5")); var projectB = SimpleTestProjectContext.CreateNETCore( "b", pathContext.SolutionRoot, NuGetFramework.Parse("NETStandard1.5")); // A -> B projectA.AddProjectToAllFrameworks(projectB); var packageX = new SimpleTestPackageContext("x", "9.0.0"); var packageB = new SimpleTestPackageContext("b", "9.0.0"); packageX.Dependencies.Add(packageB); await SimpleTestPackageUtility.CreatePackagesAsync(pathContext.PackageSource, packageX, packageB); // PackageB will be overridden by ProjectB projectA.AddPackageToAllFrameworks(packageX); solution.Projects.Add(projectA); solution.Projects.Add(projectB); solution.Create(pathContext.SolutionRoot); // Act var r = Util.Restore(pathContext, projectA.ProjectPath); var output = r.Item2 + " " + r.Item3; var reader = new LockFileFormat(); var lockFileObj = reader.Read(projectA.AssetsFileOutputPath); // Assert Assert.NotNull(lockFileObj); Assert.Equal(0, lockFileObj.LogMessages.Count()); Assert.DoesNotContain("downgrade", output, StringComparison.OrdinalIgnoreCase); } }