Пример #1
0
        private static PackageInput GetPackageInput(string file, ILogger log)
        {
            // Validate package
            log.LogInformation($"Reading {file}");

            PackageIdentity identity           = null;
            var             isSymbolsPackage   = false;
            var             hasNuspec          = false;
            var             hasMultipleNuspecs = false;
            var             nuspecName         = string.Empty;

            try
            {
                // Read basic info from the package and verify that it isn't broken.
                using (var zip = new ZipArchive(File.OpenRead(file), ZipArchiveMode.Read, leaveOpen: false))
                    using (var package = new PackageArchiveReader(zip))
                    {
                        identity         = package.GetIdentity();
                        isSymbolsPackage = SymbolsUtility.IsSymbolsPackage(zip, file);

                        // Check for correct nuspec name
                        nuspecName = identity.Id + ".nuspec";
                        var nuspecs = zip.Entries.Where(entry => entry.FullName.EndsWith(".nuspec", StringComparison.OrdinalIgnoreCase)).ToList();

                        hasNuspec          = nuspecs.Count == 1;
                        hasMultipleNuspecs = nuspecs.Count > 1;
                    }
            }
            catch
            {
                log.LogError($"Invalid package '{file}'.");
                throw;
            }

            var packageInput = new PackageInput(file, identity, isSymbolsPackage);

            // Display a message for non-normalized packages
            if (packageInput.Identity.Version.ToString() != packageInput.Identity.Version.ToNormalizedString())
            {
                var message = $"Package '{packageInput.PackagePath}' does not contain a normalized version. Normalized: '{packageInput.Identity.Version.ToNormalizedString()}' Nuspec version: '{packageInput.Identity.Version.ToString()}'. See https://semver.org/ for details.";
                log.LogVerbose(message);
            }

            // Check for correct nuspec name
            if (!hasNuspec)
            {
                throw new InvalidDataException($"'{packageInput.PackagePath}' does not contain '{nuspecName}'.");
            }

            // Check for multiple nuspec files
            if (hasMultipleNuspecs)
            {
                throw new InvalidDataException($"'{packageInput.PackagePath}' contains multiple nuspecs and cannot be consumed.");
            }

            return(packageInput);
        }
Пример #2
0
        /// <summary>
        /// Create a package input from the given file path.
        /// </summary>
        public static PackageInput Create(string file)
        {
            PackageInput result = null;

            using (var zip = new ZipArchive(File.OpenRead(file), ZipArchiveMode.Read, leaveOpen: false))
                using (var reader = new PackageArchiveReader(file))
                {
                    var isSymbolsPackage = SymbolsUtility.IsSymbolsPackage(zip, file);
                    result = new PackageInput(file, isSymbolsPackage, reader.NuspecReader);
                }

            return(result);
        }