public Package ProcessVsix(string vsixToProcess) { // Define a temporary directory to unzip the VSIX into int startPosn = vsixToProcess.LastIndexOf(@"\", StringComparison.Ordinal); int endPosn = vsixToProcess.LastIndexOf(@".", StringComparison.Ordinal); string vsixName = vsixToProcess.Substring(startPosn + 1, endPosn - 1 - startPosn); string tempFolder = Path.Combine(_extractDir, vsixName); try { // Extract (Unzip) the VSIX to a temporary directory ZipFile.ExtractToDirectory(vsixToProcess, tempFolder); // Parse the manifest VsixManifestParser parser = new VsixManifestParser(); Package package = parser.CreateFromManifest(tempFolder); // Cache the result for later analysis AddToPackageCache(package); return(package); } finally { // Delete the temporary directory // Directory.Delete(tempFolder, true); } }
public async Task <Package> ProcessVsix(Stream vsixStream, string repo, string issuetracker) { string tempFolder = Path.Combine(_webroot, "temp", Guid.NewGuid().ToString()); try { string tempVsix = Path.Combine(tempFolder, "extension.vsix"); if (!Directory.Exists(tempFolder)) { Directory.CreateDirectory(tempFolder); } using (FileStream fileStream = File.Create(tempVsix)) { await vsixStream.CopyToAsync(fileStream); } ZipFile.ExtractToDirectory(tempVsix, tempFolder); VsixManifestParser parser = new VsixManifestParser(); Package package = parser.CreateFromManifest(tempFolder, repo, issuetracker); //if (PackageCache.Any(p => p.ID == package.ID && new Version(p.Version) > new Version(package.Version))) // throw new ArgumentException("The VSIX version (" + package.Version + ") must be equal or higher than the existing VSIX"); string vsixFolder = Path.Combine(_extensionRoot, package.ID); SavePackage(tempFolder, package, vsixFolder); File.Copy(tempVsix, Path.Combine(vsixFolder, "extension.vsix"), true); return(package); } finally { Directory.Delete(tempFolder, true); } }
public async Task<Package> ProcessVsix(Stream vsixStream, string repo, string issuetracker) { string tempFolder = Path.Combine(_webroot, "temp", Guid.NewGuid().ToString()); try { string tempVsix = Path.Combine(tempFolder, "extension.vsix"); if (!Directory.Exists(tempFolder)) Directory.CreateDirectory(tempFolder); using (FileStream fileStream = File.Create(tempVsix)) { await vsixStream.CopyToAsync(fileStream); } ZipFile.ExtractToDirectory(tempVsix, tempFolder); VsixManifestParser parser = new VsixManifestParser(); Package package = parser.CreateFromManifest(tempFolder, repo, issuetracker); //if (PackageCache.Any(p => p.ID == package.ID && new Version(p.Version) > new Version(package.Version))) // throw new ArgumentException("The VSIX version (" + package.Version + ") must be equal or higher than the existing VSIX"); string vsixFolder = Path.Combine(_extensionRoot, package.ID); SavePackage(tempFolder, package, vsixFolder); File.Copy(tempVsix, Path.Combine(vsixFolder, "extension.vsix"), true); return package; } finally { Directory.Delete(tempFolder, true); } }