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);
            }
        }
示例#2
0
        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);
            }
        }
示例#3
0
		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);
			}
		}