예제 #1
0
 public void ContructorThrowsWhenMetadataIsNull()
 {
     var exception = Assert.Throws<ArgumentNullException>(() =>
     {
         var manifest = new Manifest(null);
     });
 }
예제 #2
0
        public void FilesListIsEmptyByDefault()
        {
            var manifest = new Manifest(new ManifestMetadata());

            Assert.NotNull(manifest.Files);
            Assert.Empty(manifest.Files);
        }
예제 #3
0
    public void CreateSpec()
    {
      if (!Directory.Exists(_outputPath))
        Directory.CreateDirectory(_outputPath);
      var dependencies = new List<ManifestDependencySet>();
      if (File.Exists(Path.Combine(_settings.ProjectPath, "packages.config")) && !NuspecDefinition.IsToolsOnly)
      {
        dependencies = AnalyzePackagesConfig();
      }

      var spec = new Manifest();
      var meta = RetrieveMetaData(dependencies);
      LoadAdditionalMetadata(meta);
      spec.Metadata = meta;
      LoadManifestFile(spec);

      spec.Files = NuspecDefinition.ManifestFiles;
      spec.OrganizeManifest(NuspecDefinition);
      spec.Metadata.DependencySets.ToList().ForEach(ds =>
      {
        var t = ds.Dependencies.FirstOrDefault(d => d.Id == "OCS.Package.Util");
        if (t != null)
        {
          ds.Dependencies.Remove(t);
        }
      });
      BuildPackage(spec);
    }
예제 #4
0
 public void ReturnsErrorIfIdTooLong()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = new String('a', 101),
             Version = "1.0.0"
         }
     };
     Assert.Equal(new[] { Strings.Manifest_IdTooLong }, GetErrors(m));
 }
예제 #5
0
 public void ReturnsErrorIfIdNotPresent()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = null,
             Version = "1.0.0"
         }
     };
     Assert.Equal(new[] { Strings.Manifest_MissingId }, GetErrors(m));
 }
예제 #6
0
 public void ReturnsErrorIfIdInvalid()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "not a valid id",
             Version = "1.0.0"
         }
     };
     Assert.Equal(new[] { String.Format(Strings.Manifest_InvalidId, "not a valid id") }, GetErrors(m));
 }
예제 #7
0
 public void ReturnsErrorIfProjectUrlInvalid()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1.0.0",
             ProjectUrl = "http://a b c d"
         }
     };
     Assert.Equal(new[] { Strings.Manifest_InvalidUrl }, GetErrors(m));
 }
예제 #8
0
        public void Save()
        {
            var id = "TestId";
            var version = new SemanticVersion("0.1.0");
            var authors = new string[] { "Alice", "Bob" };

            var manifest = new Manifest(new ManifestMetadata
            {
                Id = id,
                Version = version,
                Authors = authors
            });

            using (var mem = new MemoryStream())
            {
                manifest.Save(mem);

                mem.Position = 0;
                var xdoc = XDocument.Load(mem);
                var ns = xdoc.Root.GetDefaultNamespace();

                var xElemPackage = xdoc.Root;
                Assert.Equal("package", xElemPackage.Name.LocalName);
                Assert.Equal(1, xElemPackage.Elements().Count());

                var xElemMetadata = xElemPackage.Elements().Single();
                Assert.Equal("metadata", xElemMetadata.Name.LocalName);
                Assert.Equal(5, xElemMetadata.Elements().Count());

                var xElemId = xElemMetadata.Element(ns + "id");
                Assert.NotNull(xElemId);
                Assert.Equal(id, xElemId.Value);

                var xElemVersion = xElemMetadata.Element(ns + "version");
                Assert.NotNull(xElemVersion);
                Assert.Equal(version.ToString(), xElemVersion.Value);

                var xElemRequireLicense = xElemMetadata.Element(ns + "requireLicenseAcceptance");
                Assert.NotNull(xElemRequireLicense);
                Assert.Equal("false", xElemRequireLicense.Value);

                var xElemAuthors = xElemMetadata.Element(ns + "authors");
                Assert.NotNull(xElemAuthors);
                Assert.Equal(string.Join(",", authors), xElemAuthors.Value);

                var xElemOwners = xElemMetadata.Element(ns + "owners");
                Assert.NotNull(xElemOwners);
                Assert.Equal(string.Join(",", authors), xElemOwners.Value);
            }
        }
예제 #9
0
        public NuSpecFile(string filename)
        {
            _filename = filename;
            _info = new FileInfo(filename);
            using (var fs = File.Open(filename, FileMode.Open))
            {
                _manifest = Manifest.ReadFrom(fs, false);
            }
            if (Manifest.Files == null)
            {
                Manifest.Files = new List<ManifestFile>();
            }
            if (_manifest.Metadata.DependencySets == null)
            {
                _manifest.Metadata.DependencySets = new List<ManifestDependencySet>();
            }

        }
예제 #10
0
        /// <summary>
        /// Safely load Nupkg manifest data and file contents list from an untrusted zip file stream.
        /// May modify the .Position of the stream.
        /// </summary>
        public Nupkg(Stream stream, bool leaveOpen)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (!stream.CanSeek)
            {
                var originalStream = stream;
                stream = new MemoryStream(originalStream.ReadAllBytes(), writable: false);
                if (!leaveOpen)
                {
                    originalStream.Dispose();
                }
            }

            _stream = stream;
            _archive = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen);
            _manifest = SafelyLoadManifest(_archive);
        }
예제 #11
0
        static Manifest InitiateManifestFromAssembly(Assembly assembly, IEnumerable<PackageReference> deps){
            Manifest manifest = new Manifest();

            AssemblyInfo ainfo = new AssemblyInfo(assembly);

            //Version
            manifest.Metadata.Version = ManifestVersionFromAssembly(ainfo);

            // Copyright
            manifest.Metadata.Copyright = ainfo.Copyright;

            // Authors
            if (ainfo.Authors != null) {
                manifest.Metadata.Authors = ainfo.Authors.Keys.Aggregate((key, next) => key + "," + next);
                manifest.Metadata.Owners = ainfo.Authors.Keys.Aggregate((key, next) => key + "," + next);
            }

            // Description
            manifest.Metadata.Description = ainfo.Description;

            // Icon Url
            if ( ainfo.IconUrl != null )
                manifest.Metadata.IconUrl = ainfo.IconUrl.ToString();

            // Id
            manifest.Metadata.Id = ainfo.ProductTitle;

            // License Url
            if (ainfo.LicenseUrl != null)
                manifest.Metadata.LicenseUrl = ainfo.LicenseUrl.ToString();

            // Project Url
            if (ainfo.ProjectUrl != null)
                manifest.Metadata.ProjectUrl = ainfo.ProjectUrl.ToString();

            // Tags
            manifest.Metadata.Tags = ainfo.Tags;

            // Title
            manifest.Metadata.Title = ainfo.ProductTitle;

            // Dependencies
            if (deps != null) {
                manifest.Metadata.DependencySets = new List<ManifestDependencySet>();

                foreach (var frameworkVersion in deps.Select<PackageReference, FrameworkName>(pr => pr.TargetFramework).Distinct().ToArray()) {

                    NetPortableProfile npp = new NetPortableProfile("test", new FrameworkName[1]{ frameworkVersion });

                    ManifestDependencySet mds = new ManifestDependencySet();
                    mds.Dependencies = new List<ManifestDependency>();
                    mds.TargetFramework = npp.CustomProfileString;

                    manifest.Metadata.DependencySets.Add(mds);
                    foreach (var dep in deps.Where(d => d.TargetFramework == frameworkVersion).ToArray()) {

                        ManifestDependency md = new ManifestDependency();
                        md.Id = dep.Id;
                        md.Version = dep.Version.ToNormalizedString();

                        mds.Dependencies.Add(md);


                    }
                }
            }

            return manifest;
        }
예제 #12
0
 public void ReturnsErrorIfVersionInvalid()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1 2 3",
         }
     };
     Assert.Equal(new[] { String.Format(Strings.Manifest_InvalidVersion, "1 2 3") }, GetErrors(m));
 }
예제 #13
0
        private static Version SetPackageVersion(Options options, Manifest m)
        {
            Version v2;
            if (options.Version != null)
            {
                if (options.Version.StartsWith("+"))
                {
                    Version v = Version.Parse(m.Metadata.Version);
                    Version vinc = Version.Parse(options.Version.Substring(1));
                    v2 = new Version(v.Major + vinc.Major, v.Minor + vinc.Minor, v.Build + vinc.Build, 0);
                }
                else
                {
                    v2 = Version.Parse(options.Version);
                }
            }
            else
            {

                Assembly asm = FindAssembly(options, m);
                v2 = asm.GetName().Version;
            }

            m.Metadata.Version = v2.ToString();
            using (FileStream fileStream = File.Open(options.NuSpec, FileMode.Truncate))
                m.Save(fileStream, true);
            return v2;
        }
예제 #14
0
 public void ReturnsErrorIfDependencySetContainsInvalidTargetFramework()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1.0.0",
             DependencySets = new List<ManifestDependencySet>()
             {
                 new ManifestDependencySet() {
                     TargetFramework = "net40-client-full-awesome-unicorns",
                     Dependencies = new List<ManifestDependency>() {
                         new ManifestDependency() {
                             Id = "a.b.c",
                             Version = "1.0-alpha"
                         }
                     }
                 }
             }
         }
     };
     Assert.Equal(new[] { String.Format(Strings.Manifest_InvalidTargetFramework, "net40-client-full-awesome-unicorns") }, GetErrors(m));
 }
예제 #15
0
 public static IEnumerable<ValidationResult> Validate(Manifest manifest)
 {
     return Validate(manifest.Metadata);
 }
예제 #16
0
        /// <summary>
        /// Exports the page.
        /// </summary>
        /// <param name="page">The page.</param>
        /// <param name="isRecursive">if set to <c>true</c> [should export children].</param>
        /// <returns>a <see cref="T:System.IO.MemoryStream"/> of the exported page package.</returns>
        public MemoryStream ExportPage( Page page, bool isRecursive )
        {
            // Create a temp directory to hold package contents in staging area
            string packageId = Guid.NewGuid().ToString();
            var packageDirectory = CreatePackageDirectory( page.InternalName, packageId );
            var webRootPath = HttpContext.Current.Server.MapPath( "~" );

            // Create a manifest for this page export...
            Manifest manifest = new Manifest();
            manifest.Metadata = new ManifestMetadata();
            manifest.Metadata.Authors = "PageExport";
            manifest.Metadata.Version = "0.0";
            manifest.Metadata.Id = packageId;
            manifest.Metadata.Description = ( string.IsNullOrEmpty( page.Description ) ) ? "a page export" : page.Description;
            manifest.Files = new List<ManifestFile>();

            // Generate the JSON from model data and write it to disk, then add it to the manifest
            var json = GetJson( page, isRecursive );
            using ( var file = new StreamWriter( Path.Combine( packageDirectory.FullName, "export.json" ) ) )
            {
                file.Write( json );
            }
            AddToManifest( manifest, packageDirectory.FullName, webRootPath, "export.json", SearchOption.TopDirectoryOnly );

            // * Find out from `page` which Blocks need to be packaged up (recursively if ExportChildren box is checked)
            // * Grab asset folders for each Block's code file uniquely (Scripts, Assets, CSS folders)
            // * Add them to the package manifest
            var blockTypes = new Dictionary<Guid, BlockType>();
            var uniqueDirectories = new Dictionary<string, string>();
            FindUniqueBlockTypesAndDirectories( page, isRecursive, blockTypes, uniqueDirectories );

            foreach ( var blockType in blockTypes.Values )
            {
                var sourcePath = HttpContext.Current.Server.MapPath( blockType.Path );
                var directory = sourcePath.Substring( 0, sourcePath.LastIndexOf( Path.DirectorySeparatorChar ) );
                var fileName = Path.GetFileNameWithoutExtension( sourcePath );
                var pattern = string.Format( "{0}.*", fileName );
                AddToManifest( manifest, directory, webRootPath, pattern, SearchOption.TopDirectoryOnly );
            }

            // Second pass through blocks. Determine which folders (by convention) need to be added
            // to the package manifest.
            foreach ( var dir in uniqueDirectories.Keys )
            {
                var sourcePath = HttpContext.Current.Server.MapPath( dir );
                // Are there any folders present named "CSS", "Scripts" or "Assets"?
                AddToManifest( manifest, Path.Combine( sourcePath, "CSS" ), webRootPath );
                AddToManifest( manifest, Path.Combine( sourcePath, "Scripts" ), webRootPath );
                AddToManifest( manifest, Path.Combine( sourcePath, "Assets" ), webRootPath );
            }

            // Save the manifest as "pageexport.nuspec" in the temp folder
            string basePath = packageDirectory.FullName;
            string manifestPath = Path.Combine( basePath, "pageexport.nuspec" );
            using ( Stream fileStream = File.Create( manifestPath ) )
            {
                manifest.Save( fileStream );
            }

            // Create a NuGet package from the manifest and 'save' it to a memory stream for the consumer...
            // BTW - don't use anything older than nuget 2.1 due to Manifest bug (http://nuget.codeplex.com/workitem/2813)
            // which will cause the PackageBuilder constructor to fail due to <Files> vs <files> being in the manifest.
            PackageBuilder packageBuilder = new PackageBuilder( manifestPath, basePath, NullPropertyProvider.Instance, false );

            var outputStream = new MemoryStream();
            packageBuilder.Save( outputStream );

            // Clean up staging area
            packageDirectory.Delete( recursive: true );
            return outputStream;
        }
예제 #17
0
        private Manifest CreateManifest()
        {
            Manifest manifest;
            ManifestMetadata manifestMetadata;
            if (!string.IsNullOrEmpty(InputFileName))
            {
                using (var stream = File.OpenRead(InputFileName))
                {
                    manifest = Manifest.ReadFrom(stream);
                }
                if (manifest.Metadata == null)
                {
                    manifest = new Manifest(new ManifestMetadata(), manifest.Files);
                }
            }
            else
            {
                manifest = new Manifest(new ManifestMetadata());
            }


            manifestMetadata = manifest.Metadata;

            manifestMetadata.UpdateMember(x => x.Authors, Authors?.Split(';'));
            manifestMetadata.UpdateMember(x => x.Copyright, Copyright);
            manifestMetadata.UpdateMember(x => x.DependencySets, GetDependencySets());
            manifestMetadata.UpdateMember(x => x.Description, Description);
            manifestMetadata.DevelopmentDependency |= DevelopmentDependency;
            manifestMetadata.UpdateMember(x => x.FrameworkAssemblies, GetFrameworkAssemblies());
            manifestMetadata.UpdateMember(x => x.IconUrl, IconUrl != null ? new Uri(IconUrl) : null);
            manifestMetadata.UpdateMember(x => x.Id, Id);
            manifestMetadata.UpdateMember(x => x.Language, Language);
            manifestMetadata.UpdateMember(x => x.LicenseUrl, new Uri(LicenseUrl));
            manifestMetadata.UpdateMember(x => x.MinClientVersionString, MinClientVersion);
            manifestMetadata.UpdateMember(x => x.Owners, Owners?.Split(';'));
            manifestMetadata.UpdateMember(x => x.ProjectUrl, ProjectUrl != null ? new Uri(ProjectUrl) : null);
            manifestMetadata.AddRangeToMember(x => x.PackageAssemblyReferences, GetReferenceSets());
            manifestMetadata.UpdateMember(x => x.ReleaseNotes, ReleaseNotes);
            manifestMetadata.RequireLicenseAcceptance |= RequireLicenseAcceptance;
            manifestMetadata.UpdateMember(x => x.Summary, Summary);
            manifestMetadata.UpdateMember(x => x.Tags, Tags);
            manifestMetadata.UpdateMember(x => x.Title, Title);
            manifestMetadata.UpdateMember(x => x.Version, Version != null ? new NuGetVersion(Version) : null);

            manifest.AddRangeToMember(x => x.Files, GetManifestFiles());

            return manifest;
        }
예제 #18
0
 public void ReturnsErrorIfDependencySetContainsInvalidId()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1.0.0",
             DependencySets = new List<ManifestDependencySet>()
             {
                 new ManifestDependencySet() {
                     TargetFramework = "net40",
                     Dependencies = new List<ManifestDependency>() {
                         new ManifestDependency() {
                             Id = "a b c",
                             Version = "1.0"
                         }
                     }
                 }
             }
         }
     };
     Assert.Equal(new[] { String.Format(Strings.Manifest_InvalidDependency, "a b c", "1.0") }, GetErrors(m));
 }
예제 #19
0
 private string[] GetErrors(Manifest m)
 {
     return ManifestValidator
         .Validate(m)
         .Select(r => r.ErrorMessage)
         .ToArray();
 }
예제 #20
0
 public void ReturnsErrorIfFrameworkAssemblyReferenceContainsInvalidTargetFramework()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1.0.0",
             FrameworkAssemblies = new List<ManifestFrameworkAssembly>()
             {
                 new ManifestFrameworkAssembly() {
                     TargetFramework = "net40-client-full-awesome-unicorns",
                     AssemblyName = "System.Awesome"
                 }
             }
         }
     };
     Assert.Equal(new[] { String.Format(Strings.Manifest_InvalidTargetFramework, "net40-client-full-awesome-unicorns") }, GetErrors(m));
 }
예제 #21
0
 public void NoErrorIfFrameworkAssemblyReferenceContainsEmptyTargetFramework()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1.0.0",
             FrameworkAssemblies = new List<ManifestFrameworkAssembly>()
             {
                 new ManifestFrameworkAssembly() {
                     TargetFramework = "",
                     AssemblyName = "System.Awesome"
                 }
             }
         }
     };
     Assert.Equal(GetErrors(m).Length, 0);
 }
예제 #22
0
        public static string CreateManifest(List<ManifestFile> manifestFiles, string releaseNotes)
        {
            var manifest = new Manifest
            {
                Metadata = new ManifestMetadata
                {
                    Id = Options.NuspecId,
                    Version = "0.0.0", //overloaded by nuget pack cmd line parameters
                    Authors = "Sitecore NuGetPack Runner",
                    Description = string.Format("Sitecore NuGet Package, built on {0}", DateTime.Now.ToString("HH:mm dd/MM/yyyy")),
                    ReleaseNotes = releaseNotes
                },
                Files = manifestFiles
            };

            var manifestFilePath = Path.Combine(Options.TargetDir, Options.NuspecId + NuspecExt);
            using (var fsManifest = new FileStream(manifestFilePath, FileMode.Create))
            {
                manifest.Save(fsManifest, true);
            }
            return manifestFilePath;
        }
예제 #23
0
    private void LoadManifestFile(Manifest manifest)
    {

      if (!_hasAssembly)
        return;

      _assembly.GetReferencedAssemblies().ToList().ForEach(references =>
      {
        if (manifest.Metadata.DependencySets.Exists(s => s.Dependencies.Exists(d => d.Id == references.Name)))
        {
          return;
        }

        Assembly ass;
        try
        {
          ass = Assembly.Load(references);
        }
        catch (Exception)
        {
          ass = Assembly.LoadFrom(Path.Combine(_settings.OutputPath, string.Format("{0}.{1}", references.Name, "dll")));
        }

        if (ass == null)
          return;
        if (CheckAssemblyAndIncludeIfReferenced(ass))
        {
          ass.GetReferencedAssemblies().ToList().ForEach(dependent =>
          {
            if (manifest.Metadata.DependencySets.Exists(s => s.Dependencies.Exists(d => d.Id == dependent.Name)))
            {
              return;
            }
            try
            {
              var depAss = Assembly.Load(dependent);
              CheckAssemblyAndIncludeIfReferenced(depAss);
            }
            catch (Exception)
            {
            }
          });
        }
      });

      CheckAssemblyAndIncludeIfReferenced(_assembly);
    }
예제 #24
0
 private static Assembly FindAssembly(Options options, Manifest manifest)
 {
     string id = manifest.Metadata.Id;
     ManifestFile asmf = manifest.Files.FirstOrDefault(f => Path.GetFileName(f.Source) == id + ".exe");
     if (asmf == null)
         return null;
     string fullPath = Path.Combine(Path.GetDirectoryName(options.NuSpec), asmf.Source);
     return Assembly.ReflectionOnlyLoadFrom(fullPath);
 }
예제 #25
0
        private bool IsDifferent(Manifest newManifest)
        {
            if (!File.Exists(OutputFileName))
                return true;

            var oldSource = File.ReadAllText(OutputFileName);
            var newSource = "";
            using (var stream = new MemoryStream())
            {
                newManifest.Save(stream);
                stream.Seek(0, SeekOrigin.Begin);
                newSource = Encoding.UTF8.GetString(stream.ToArray());
            }

            return oldSource != newSource;
        }
예제 #26
0
 public void NoErrorIfDependencySetContainsEmptyTargetFramework()
 {
     Manifest m = new Manifest()
     {
         Metadata = new ManifestMetadata()
         {
             Id = "valid",
             Version = "1.0.0",
             DependencySets = new List<ManifestDependencySet>()
             {
                 new ManifestDependencySet() {
                     TargetFramework = "",
                     Dependencies = new List<ManifestDependency>() {
                         new ManifestDependency() {
                             Id = "a.b.c",
                             Version = "1.0-alpha"
                         }
                     }
                 }
             }
         }
     };
     Assert.Equal(GetErrors(m).Length, 0);
 }
예제 #27
0
        /// <summary>
        /// Add the given directories files (matching the given file filter and search options)
        /// to the manifest.
        /// </summary>
        /// <param name="manifest">A NuGet Manifest</param>
        /// <param name="directory">the directory containing the file(s)</param>
        /// <param name="webRootPath">the physical path to the app's webroot</param>
        /// <param name="filterPattern"> A file filter pattern such as *.* or *.cs</param>
        /// <param name="searchOption">A <see cref="T:System.IO.SearchOption"/> search option to define the scope of the search</param>
        private void AddToManifest( Manifest manifest, string directory, string webRootPath,
            string filterPattern = "*.*", SearchOption searchOption = SearchOption.AllDirectories )
        {
            if ( !Directory.Exists( directory ) )
            {
                return;
            }

            // In our trivial case, the files we're adding need to have a target folder under the "content\"
            // folder and the source path suffix will be the relative path to the file's physical location.
            // ex: `Blocks\Foo\Foo.ascx` and `App_Data\PackageStaging\{PageName}_{Guid}\export.json`
            var files = from file in Directory.EnumerateFiles( directory, filterPattern, searchOption )
                        let pathSuffix = file.Substring( webRootPath.Length )
                        select new ManifestFile()
                        {
                            Source = Path.Combine( "..", "..", "..", pathSuffix ),
                            Target = Path.Combine( "content", pathSuffix )
                        };

            manifest.Files.AddRange( files );
        }
예제 #28
0
        private static string CreatePackage(Options options, Manifest m)
        {
            string expectedPackage = string.Format("{0}.{1}.nupkg", m.Metadata.Id, m.Metadata.Version);

            TryDelete(expectedPackage);

            bool p = RunProcess(options.NugetExe, string.Format("pack \"{0}\"", options.NuSpec));
            return p && File.Exists(expectedPackage) ? expectedPackage : null;
            //.nuget\NuGet.exe pack NewOrder\NewOrder.nuspec
        }
예제 #29
0
파일: Manifest.cs 프로젝트: ebenoit/NuGet
        internal static void Validate(Manifest manifest)
        {
            var results = new List<ValidationResult>();

            // Run all data annotations validations
            TryValidate(manifest.Metadata, results);
            TryValidate(manifest.Files, results);
            if (manifest.Metadata.DependencySets != null)
            {
                TryValidate(manifest.Metadata.DependencySets.SelectMany(d => d.Dependencies), results);
            }
            TryValidate(manifest.Metadata.ReferenceSets, results);

            if (results.Any())
            {
                string message = String.Join(Environment.NewLine, results.Select(r => r.ErrorMessage));
                throw new ValidationException(message);
            }

            // Validate additional dependency rules dependencies
            ValidateDependencySets(manifest.Metadata);
        }
예제 #30
0
    private void BuildPackage(Manifest manifest)
    {
      var builder = new PackageBuilder();
      builder.Populate(manifest.Metadata);
      builder.PopulateFiles(_outputPath, manifest.Files);
      var file = Path.Combine(_outputPath, string.Format("{0}.{1}.nupkg", builder.Id, builder.Version));
      var localRepo = new LocalPackageRepository(_outputPath, NuspecDefinition.PackageSource);

      if (File.Exists(file))
      {
        File.Delete(file);
      }

      using (var buildFile = File.Open(file, FileMode.OpenOrCreate))
      {
        builder.Save(buildFile);
        buildFile.Flush();
        buildFile.Close();
      }
      var package = localRepo.GetPackage(builder.Id, builder.Version);

      if (NuspecDefinition.PublishPackage)
      {
        localRepo.PushPackage(package);
      }
    }