private static Package ProcessVsix(string sourceVsixPath) { string temp = Path.GetTempPath(); string tempFolder = Path.Combine(temp, Guid.NewGuid().ToString()); try { Directory.CreateDirectory(tempFolder); ZipFile.ExtractToDirectory(sourceVsixPath, tempFolder); var vsixFile = Path.GetFileName(sourceVsixPath); var vsixSourcePath = string.IsNullOrEmpty(_source) ? sourceVsixPath : Path.Combine(_source, vsixFile); var parser = new VsixManifestParser(); Package package = parser.CreateFromManifest(tempFolder, vsixFile, vsixSourcePath); if (!string.IsNullOrEmpty(package.Icon)) { string currentDir = Path.GetDirectoryName(_outputFile); string sourceIconPath = Path.Combine(tempFolder, package.Icon); if (File.Exists(sourceIconPath)) { string iconDir = Path.Combine(currentDir, "icons"); string icon = Path.Combine(iconDir, package.ID + Path.GetExtension(package.Icon)); if (!Directory.Exists(iconDir)) { DirectoryInfo dir = Directory.CreateDirectory(iconDir); dir.Attributes |= FileAttributes.Hidden; } File.Copy(sourceIconPath, icon, true); } } Console.WriteLine($"Parsed {package.FileName}"); return(package); } finally { Directory.Delete(tempFolder, true); } }
private static Package ProcessVsix(string sourceVsixPath) { string temp = Path.GetTempPath(); string tempFolder = Path.Combine(temp, Guid.NewGuid().ToString()); try { Directory.CreateDirectory(tempFolder); ZipFile.ExtractToDirectory(sourceVsixPath, tempFolder); var vsixFile = Path.GetFileName(sourceVsixPath); string alternateDestination = Path.Combine(_source, vsixFile); // Append the relative path to source if (_recursive) { string subFolder = sourceVsixPath.Substring(_dir.Length); alternateDestination = Path.Combine(_source, subFolder); if (Uri.IsWellFormedUriString(_source, UriKind.RelativeOrAbsolute)) { UriBuilder uriBuilder = new UriBuilder(_source); uriBuilder.Path = alternateDestination; alternateDestination = uriBuilder.Uri.ToString(); } } var vsixSourcePath = string.IsNullOrEmpty(_source) ? sourceVsixPath : alternateDestination; var parser = new VsixManifestParser(); Package package = parser.CreateFromManifest(tempFolder, vsixFile, vsixSourcePath); if (!string.IsNullOrEmpty(package.Icon)) { string currentDir = Path.GetDirectoryName(_outputFile); string sourceIconPath = Path.Combine(tempFolder, package.Icon); if (File.Exists(sourceIconPath)) { string iconDir = Path.Combine(currentDir, "icons"); string icon = Path.Combine(iconDir, package.ID + Path.GetExtension(package.Icon)); if (!Directory.Exists(iconDir)) { DirectoryInfo dir = Directory.CreateDirectory(iconDir); dir.Attributes |= FileAttributes.Hidden; } File.Copy(sourceIconPath, icon, true); } } Console.WriteLine($"Parsed {package.FileName}"); return(package); } finally { Directory.Delete(tempFolder, true); } }