public void PackTaskLogic_SupportsPackagePath_OnContentLinux(string packagePath, string fileName, string expectedPackagePaths) { // Arrange using (var testDir = TestDirectory.Create()) { var tc = new TestContext(testDir); var metadata = packagePath != null ? new Dictionary <string, string>() { { "PackagePath", packagePath }, } : null; var msbuildItem = tc.AddContentToProject("", fileName, "hello world", metadata); tc.Request.PackageFiles = new MSBuildItem[] { msbuildItem }; tc.Request.ContentTargetFolders = new string[] { "folderA", "folderB" }; // Act tc.BuildPackage(); // Assert Assert.True(File.Exists(tc.NuspecPath), "The intermediate .nuspec file is not in the expected place."); Assert.True(File.Exists(tc.NupkgPath), "The output .nupkg file is not in the expected place."); using (var nupkgReader = new PackageArchiveReader(tc.NupkgPath)) { // Validate the content items var contentItems = nupkgReader.GetFiles().ToList(); foreach (var expectedPackagePath in expectedPackagePaths.Split(';')) { Assert.True(contentItems.Contains(expectedPackagePath)); } } } }
public void PackTaskLogic_BuildOutputWithoutFinalOutputPath_FallbackToIdentity() { // Arrange using (var testDir = TestDirectory.Create()) { var tc = new TestContext(testDir); var metadata = new Dictionary <string, string>() { { "BuildAction", "None" }, { "Identity", Path.Combine(testDir.Path, "abc.dll") }, { "TargetFramework", "net45" } }; var msbuildItem = tc.AddContentToProject("", "abc.dll", "hello world", metadata); tc.Request.BuildOutputInPackage = new MSBuildItem[] { msbuildItem }; tc.Request.ContentTargetFolders = new string[] { "content", "contentFiles" }; // Act tc.BuildPackage(); // Assert Assert.True(File.Exists(tc.NuspecPath), "The intermediate .nuspec file is not in the expected place."); Assert.True(File.Exists(tc.NupkgPath), "The output .nupkg file is not in the expected place."); using (var nupkgReader = new PackageArchiveReader(tc.NupkgPath)) { var libItems = nupkgReader.GetLibItems().ToList(); Assert.Equal(1, libItems.Count); Assert.Equal(FrameworkConstants.CommonFrameworks.Net45, libItems[0].TargetFramework); Assert.Equal(new[] { "lib/net45/abc.dll" }, libItems[0].Items); } } }
public void PackTaskLogic_SupportsNoDefaultExcludes(bool noDefaultExcludes) { // Arrange using (var testDir = TestDirectory.Create()) { var tc = new TestContext(testDir); var metadata = new Dictionary <string, string>() { { "BuildAction", "None" }, { "PackageCopyToOutput", "true" }, { "Pack", "true" } }; var msbuildItem = tc.AddContentToProject("", ".prefercliruntime", "hello world", metadata); tc.Request.PackageFiles = new MSBuildItem[] { msbuildItem }; tc.Request.ContentTargetFolders = new string[] { "content" }; tc.Request.NoDefaultExcludes = noDefaultExcludes; // Act tc.BuildPackage(); // Assert Assert.True(File.Exists(tc.NuspecPath), "The intermediate .nuspec file is not in the expected place."); Assert.True(File.Exists(tc.NupkgPath), "The output .nupkg file is not in the expected place."); using (var nupkgReader = new PackageArchiveReader(tc.NupkgPath)) { var nuspecReader = nupkgReader.NuspecReader; // Validate the content items var contentItems = nupkgReader.GetFiles("content").ToList(); if (noDefaultExcludes) { Assert.Equal(contentItems.Count, 1); Assert.Contains("content/.prefercliruntime", contentItems, StringComparer.Ordinal); } else { Assert.Equal(contentItems.Count, 0); } } } }
public void PackTaskLogic_SupportsContentTargetFolders() { // Arrange using (var testDir = TestDirectory.Create()) { var tc = new TestContext(testDir); var msbuildItem = tc.AddContentToProject("", "abc.txt", "hello world"); tc.Request.ContentTargetFolders = new string[] { "folderA", "folderB" }; tc.Request.PackageFiles = new MSBuildItem[] { msbuildItem }; // Act tc.BuildPackage(); // Assert Assert.True(File.Exists(tc.NuspecPath), "The intermediate .nuspec file is not in the expected place."); Assert.True(File.Exists(tc.NupkgPath), "The output .nupkg file is not in the expected place."); using (var nupkgReader = new PackageArchiveReader(tc.NupkgPath)) { var nuspecReader = nupkgReader.NuspecReader; // Validate the .nuspec. Assert.Equal(tc.Request.PackageId, nuspecReader.GetId()); Assert.Equal(tc.Request.PackageVersion, nuspecReader.GetVersion().ToFullString()); Assert.Equal(string.Join(",", tc.Request.Authors), nuspecReader.GetAuthors()); Assert.Equal(string.Join(",", tc.Request.Authors), nuspecReader.GetOwners()); Assert.Equal(tc.Request.Description, nuspecReader.GetDescription()); Assert.False(nuspecReader.GetRequireLicenseAcceptance()); // Validate the assets. var libItems = nupkgReader.GetLibItems().ToList(); Assert.Equal(1, libItems.Count); Assert.Equal(FrameworkConstants.CommonFrameworks.Net45, libItems[0].TargetFramework); Assert.Equal(new[] { "lib/net45/a.dll" }, libItems[0].Items); // Validate the content items foreach (var contentTargetFolder in tc.Request.ContentTargetFolders) { var contentItems = nupkgReader.GetFiles(contentTargetFolder).ToList(); Assert.Equal(1, contentItems.Count); Assert.Equal(new[] { contentTargetFolder + "/abc.txt" }, contentItems); } } } }
public void PackTaskLogic_SupportsContentFiles_WithPackageFlatten() { // Arrange using (var testDir = TestDirectory.Create()) { var tc = new TestContext(testDir); var metadata = new Dictionary <string, string>() { { "BuildAction", "None" }, { "PackageFlatten", "true" }, }; var msbuildItem = tc.AddContentToProject("", "abc.txt", "hello world", metadata); tc.Request.PackageFiles = new MSBuildItem[] { msbuildItem }; tc.Request.ContentTargetFolders = new string[] { "content", "contentFiles" }; // Act tc.BuildPackage(); // Assert Assert.True(File.Exists(tc.NuspecPath), "The intermediate .nuspec file is not in the expected place."); Assert.True(File.Exists(tc.NupkgPath), "The output .nupkg file is not in the expected place."); using (var nupkgReader = new PackageArchiveReader(tc.NupkgPath)) { var nuspecReader = nupkgReader.NuspecReader; var contentFiles = nuspecReader.GetContentFiles().ToList(); Assert.Equal(contentFiles.Count, 1); Assert.Equal(contentFiles[0].BuildAction, "None", StringComparer.Ordinal); Assert.Equal(contentFiles[0].Include, "any/net45/abc.txt", StringComparer.Ordinal); Assert.Equal(contentFiles[0].Flatten, true); // Validate the content items var contentItems = nupkgReader.GetFiles("content").ToList(); var contentFileItems = nupkgReader.GetFiles("contentFiles").ToList(); Assert.Equal(contentItems.Count, 1); Assert.Equal(contentFileItems.Count, 1); Assert.Contains("content/abc.txt", contentItems, StringComparer.Ordinal); Assert.Contains("contentFiles/any/net45/abc.txt", contentFileItems, StringComparer.Ordinal); } } }
public void PackTaskLogic_InfersFrameworkPlatformVersionFromAlias() { // Arrange using (var testDir = TestDirectory.Create()) { var tc = new TestContext(testDir, "net50-windows"); var assetsJson = @"{ ""version"": 3, ""targets"": { ""net5.0"": {}, ""net5.0-windows7.0"": {} }, ""libraries"": {}, ""projectFileDependencyGroups"": { ""net5.0"": [], ""net5.0-windows7.0"": [] }, ""project"": { ""version"": ""0.0.0"", ""restore"": { ""projectName"": ""bar"", ""projectStyle"": ""PackageReference"", ""crossTargeting"": true, ""fallbackFolders"": [ ""C:\\Microsoft\\Xamarin\\NuGet\\"" ], ""originalTargetFrameworks"": [ ""net5.0"", ""net50-windows"" ], ""sources"": { ""https://api.nuget.org/v3/index.json"": {}, }, ""frameworks"": { ""net5.0"": { ""targetAlias"": ""net5.0"", ""projectReferences"": {} }, ""net5.0-windows7.0"": { ""targetAlias"": ""net50-windows"", ""projectReferences"": {} } }, ""warningProperties"": { ""warnAsError"": [ ""NU1605"" ] } }, ""frameworks"": { ""net5.0"": { ""targetAlias"": ""net5.0"", ""imports"": [ ""net461"", ""net462"", ""net47"", ""net471"", ""net472"", ""net48"" ], ""assetTargetFallback"": true, ""warn"": true, ""frameworkReferences"": { ""Microsoft.NETCore.App"": { ""privateAssets"": ""all"" } }, }, ""net5.0-windows7.0"": { ""targetAlias"": ""net50-windows"", ""imports"": [ ""net461"", ""net462"", ""net47"", ""net471"", ""net472"", ""net48"" ], ""assetTargetFallback"": true, ""warn"": true, ""frameworkReferences"": { ""Microsoft.NETCore.App"": { ""privateAssets"": ""all"" } }, } } } }"; File.WriteAllText(Path.Combine(testDir, "obj", "project.assets.json"), assetsJson); tc.Request.PackageFiles = new MSBuildItem[] { tc.AddContentToProject("", "abc.txt", "hello world", new Dictionary <string, string>() { { "BuildAction", "Content" } }), tc.AddContentToProject("", "def.txt", "hello world", new Dictionary <string, string>() { { "BuildAction", "None" }, { "Pack", "true" }, { "PackagePath", "contentFiles\\net5.0-windows" } }) }; tc.Request.ContentTargetFolders = new string[] { "content", "contentFiles" }; // Act tc.BuildPackage(); // Assert using (var nupkgReader = new PackageArchiveReader(tc.NupkgPath)) { var nuspecReader = nupkgReader.NuspecReader; // Validate the assets. var libItems = nupkgReader.GetLibItems().ToList(); Assert.Equal(1, libItems.Count); Assert.Equal(NuGetFramework.Parse("net5.0-windows7.0"), libItems[0].TargetFramework); Assert.Equal(new[] { "lib/net5.0-windows7.0/a.dll" }, libItems[0].Items); var contentFiles = nuspecReader.GetContentFiles().ToList(); Assert.Equal(contentFiles.Count, 2); Assert.Equal(contentFiles[0].BuildAction, "Content", StringComparer.Ordinal); Assert.Equal(contentFiles[0].Include, "any/net5.0-windows7.0/abc.txt", StringComparer.Ordinal); Assert.Equal(contentFiles[1].BuildAction, "None", StringComparer.Ordinal); Assert.Equal(contentFiles[1].Include, "net5.0-windows/def.txt", StringComparer.Ordinal); // Validate the content items var contentItems = nupkgReader.GetFiles("content").ToList(); var contentFileItems = nupkgReader.GetFiles("contentFiles").ToList(); Assert.Equal(contentItems.Count, 1); Assert.Equal(contentFileItems.Count, 2); Assert.Contains("content/abc.txt", contentItems, StringComparer.Ordinal); Assert.Contains("contentFiles/any/net5.0-windows7.0/abc.txt", contentFileItems, StringComparer.Ordinal); Assert.Contains("contentFiles/net5.0-windows/def.txt", contentFileItems, StringComparer.Ordinal); } } }