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('/');
}