Skip to content

Instantly share code, notes, and snippets.

@nyctef
Created July 30, 2015 21:21
Show Gist options
  • Save nyctef/ee84db4096be6062bd79 to your computer and use it in GitHub Desktop.
Save nyctef/ee84db4096be6062bd79 to your computer and use it in GitHub Desktop.
Unpackage a nuget package

based on http://stackoverflow.com/a/508030/895407

        private static void ExtractPackage(string packageFilename, DirectoryInfo toFolder)
        {
            using (var package = Package.Open(packageFilename))
            {
                ExtractPackage(package, extractedCommandlineFolder);
            }
        }
        
        private static void ExtractPackage(Package package, DirectoryInfo toFolder)
        {
            foreach (var part in package.GetParts())
            {
                var target = Path.Combine(toFolder.FullName, CreateFilenameFromUri(part.Uri));
                EnsureDirectoryExists(target);
                using (var source = part.GetStream(FileMode.Open, FileAccess.Read))
                using (var destination = File.OpenWrite(target))
                {
                    source.CopyTo(destination);
                }
            }
        }

        private static void EnsureDirectoryExists(string target)
        {
            var directoryName = Path.GetDirectoryName(target);
            if (directoryName != null)
            {
                Directory.CreateDirectory(directoryName);
            }
        }

        private static string CreateFilenameFromUri(Uri uri)
        {
            return uri.OriginalString.TrimStart('/');
        }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment