From bc29675161da4ff46a438de973a1cfc3d91e07a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Eorgeir=20=C3=93marsson?= Date: Fri, 3 Nov 2017 14:34:17 +0000 Subject: [PATCH] Added the ability to supply baseNuspecFile to the CreatePackage task --- .../CreatePackage.cs | 47 ++++++++++++------- .../NuGet.Build.Packaging.targets | 4 +- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/Build/NuGet.Build.Packaging.Tasks/CreatePackage.cs b/src/Build/NuGet.Build.Packaging.Tasks/CreatePackage.cs index 5e3673b..efe1f36 100644 --- a/src/Build/NuGet.Build.Packaging.Tasks/CreatePackage.cs +++ b/src/Build/NuGet.Build.Packaging.Tasks/CreatePackage.cs @@ -26,6 +26,9 @@ public class CreatePackage : Task public string NuspecFile { get; set; } + public string BaseNuspecFile { get; set; } + + [Output] public ITaskItem OutputPackage { get; set; } @@ -40,7 +43,7 @@ public override bool Execute() OutputPackage = new TaskItem(TargetPath); Manifest.CopyMetadataTo(OutputPackage); - + return !Log.HasLoggedErrors; } catch (Exception ex) @@ -66,6 +69,16 @@ public Manifest CreateManifest() { var metadata = new ManifestMetadata(); + if (!string.IsNullOrEmpty(BaseNuspecFile)) + { + using (var stream = File.OpenRead(BaseNuspecFile)) + { + var baesManifest = NuGet.Packaging.Manifest.ReadFrom(stream, false); + metadata = baesManifest.Metadata; + + } + } + metadata.Id = Manifest.GetMetadata("Id"); metadata.Version = NuGetVersion.Parse(Manifest.GetMetadata(MetadataName.Version)); metadata.DevelopmentDependency = Manifest.GetBoolean("DevelopmentDependency"); @@ -106,7 +119,7 @@ public Manifest CreateManifest() void AddDependencies(Manifest manifest) { var dependencies = from item in Contents - where item.GetMetadata(MetadataName.Kind) == PackageItemKind.Dependency && + where item.GetMetadata(MetadataName.Kind) == PackageItemKind.Dependency && !"all".Equals(item.GetMetadata(MetadataName.PrivateAssets), StringComparison.OrdinalIgnoreCase) select new Dependency { @@ -140,12 +153,12 @@ select item.GetNuGetTargetFramework())) definedDependencyGroups.Add(targetFramework.GetFrameworkString(), new PackageDependencyGroup(targetFramework, Array.Empty())); - manifest.Metadata.DependencyGroups = definedDependencyGroups.Values; + manifest.Metadata.DependencyGroups = definedDependencyGroups.Values.Concat(manifest.Metadata.DependencyGroups); } void AddFiles(Manifest manifest) { - var contents = Contents.Where(item => + var contents = Contents.Where(item => !string.IsNullOrEmpty(item.GetMetadata(MetadataName.PackagePath))); var duplicates = contents.GroupBy(item => item.GetMetadata(MetadataName.PackagePath)) @@ -166,7 +179,7 @@ void AddFiles(Manifest manifest) })); // Additional metadata for the content files must be added separately - manifest.Metadata.ContentFiles = contents + var contentFiles = contents .Where(item => item.GetMetadata(MetadataName.PackageFolder) == PackagingConstants.Folders.ContentFiles) .Select(item => new ManifestContentFiles { @@ -174,20 +187,22 @@ void AddFiles(Manifest manifest) BuildAction = item.GetNullableMetadata(MetadataName.ContentFile.BuildAction), CopyToOutput = item.GetNullableMetadata(MetadataName.ContentFile.CopyToOutput), Flatten = item.GetNullableMetadata(MetadataName.ContentFile.Flatten), - }).ToArray(); + }); + + manifest.Metadata.ContentFiles = contentFiles.Concat(manifest.Metadata.ContentFiles); } void AddFrameworkAssemblies(Manifest manifest) { var frameworkReferences = (from item in Contents - where item.GetMetadata(MetadataName.Kind) == PackageItemKind.FrameworkReference - select new FrameworkAssemblyReference - ( - item.ItemSpec, - new[] { NuGetFramework.Parse(item.GetTargetFrameworkMoniker().FullName) } - )).Distinct(FrameworkAssemblyReferenceComparer.Default); - - manifest.Metadata.FrameworkReferences = frameworkReferences; + where item.GetMetadata(MetadataName.Kind) == PackageItemKind.FrameworkReference + select new FrameworkAssemblyReference + ( + item.ItemSpec, + new[] { NuGetFramework.Parse(item.GetTargetFrameworkMoniker().FullName) } + )).Distinct(FrameworkAssemblyReferenceComparer.Default); + + manifest.Metadata.FrameworkReferences = frameworkReferences.Concat(manifest.Metadata.FrameworkReferences); } void BuildPackage(Stream output) @@ -199,9 +214,9 @@ void BuildPackage(Stream output) // We don't use PopulateFiles because that performs search expansion, base path // extraction and the like, which messes with our determined files to include. // TBD: do we support wilcard-based include/exclude? - builder.Files.AddRange(manifest.Files.Select(file => + builder.Files.AddRange(manifest.Files.Select(file => new PhysicalPackageFile { SourcePath = file.Source, TargetPath = file.Target })); - + builder.Save(output); if (!string.IsNullOrEmpty(NuspecFile)) diff --git a/src/Build/NuGet.Build.Packaging.Tasks/NuGet.Build.Packaging.targets b/src/Build/NuGet.Build.Packaging.Tasks/NuGet.Build.Packaging.targets index ae27d6e..ec742dd 100644 --- a/src/Build/NuGet.Build.Packaging.Tasks/NuGet.Build.Packaging.targets +++ b/src/Build/NuGet.Build.Packaging.Tasks/NuGet.Build.Packaging.targets @@ -233,7 +233,7 @@ Copyright (c) .NET Foundation. All rights reserved. - +