private IEnumerable <string> GetPackageAssemblyNames(string path) { var compatibilityProvider = new DefaultCompatibilityProvider(); var folderReader = new PackageFolderReader(Path.Combine(path, _fileSystem.PackagesFolder)); var nupkgFiles = folderReader.GetFiles().Where(x => Path.GetExtension(x).ToLowerInvariant() == ".nupkg"); var packagesConfig = XDocument.Parse(File.ReadAllText(Path.Combine(path, _fileSystem.PackagesFile))); var reader = new PackagesConfigReader(packagesConfig); var contents = reader.GetPackages(); var result = new List <string>(); foreach (var nupkg in nupkgFiles) { var stream = folderReader.GetStream(nupkg); var packageReader = new PackageReader(stream); var identity = packageReader.GetIdentity(); var packagesConfigReference = contents.FirstOrDefault(x => x.PackageIdentity.Id == identity.Id && x.PackageIdentity.Version == identity.Version); if (packagesConfigReference == null) { break; } var packageContents = packageReader.GetLibItems().Where(x => compatibilityProvider.IsCompatible(x.TargetFramework, packagesConfigReference.TargetFramework)). SelectMany(x => x.Items.Where(i => Path.GetExtension(i).ToLowerInvariant() == ".dll")); result.AddRange(packageContents); } return(result); }
public async override Task <IEnumerable <Packaging.PackageReference> > GetInstalledPackagesAsync(CancellationToken token) { var result = new List <Packaging.PackageReference>(); foreach (object item in await _project.GetInstalledPackagesAsync(token)) { Packaging.Core.PackageIdentity identity = null; var moniker = item as INuGetPackageMoniker; if (moniker != null) { identity = new Packaging.Core.PackageIdentity( moniker.Id, NuGetVersion.Parse(moniker.Version)); } else { // otherwise, item is the file name of the nupkg file var fileName = item as string; using (var fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { var zipArchive = new ZipArchive(fileStream); var packageReader = new PackageReader(zipArchive); identity = packageReader.GetIdentity(); } } result.Add(new Packaging.PackageReference( identity, targetFramework: null)); } return(result); }
public void PackageFolderReader_Basic() { var packageNupkg = TestPackages.GetLegacyTestPackage(); var zip = new ZipArchive(packageNupkg.OpenRead()); PackageReader zipReader = new PackageReader(zip); var folder = Path.Combine(packageNupkg.Directory.FullName, Guid.NewGuid().ToString()); var zipFile = new ZipArchive(File.OpenRead(packageNupkg.FullName)); zipFile.ExtractAll(folder); var folderReader = new PackageFolderReader(folder); Assert.Equal(zipReader.GetIdentity(), folderReader.GetIdentity(), new PackageIdentityComparer()); Assert.Equal(zipReader.GetLibItems().Count(), folderReader.GetLibItems().Count()); Assert.Equal(zipReader.GetReferenceItems().Count(), folderReader.GetReferenceItems().Count()); Assert.Equal(zipReader.GetReferenceItems().First().Items.First(), folderReader.GetReferenceItems().First().Items.First()); }
private async Task <bool> ExecuteCoreAsync( string fullScriptPath, string packageInstallPath, ZipArchive packageZipArchive, EnvDTEProject envDTEProject, NuGetProject nuGetProject, INuGetProjectContext nuGetProjectContext) { if (File.Exists(fullScriptPath)) { PackageIdentity packageIdentity = null; if (envDTEProject != null) { NuGetFramework targetFramework; nuGetProject.TryGetMetadata <NuGetFramework>(NuGetProjectMetadataKeys.TargetFramework, out targetFramework); // targetFramework can be null for unknown project types string shortFramework = targetFramework == null ? string.Empty : targetFramework.GetShortFolderName(); var packageReader = new PackageReader(packageZipArchive); packageIdentity = packageReader.GetIdentity(); nuGetProjectContext.Log(MessageLevel.Debug, NuGet.ProjectManagement.Strings.Debug_TargetFrameworkInfoPrefix, packageIdentity, envDTEProject.Name, shortFramework); //logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo_PowershellScripts, // Path.GetDirectoryName(scriptFile.Path), VersionUtility.GetTargetFrameworkLogString(scriptFile.TargetFramework)); } if (fullScriptPath.EndsWith(PowerShellScripts.Init, StringComparison.OrdinalIgnoreCase)) { _skipPSScriptExecution = await NuGetPackageManager.PackageExistsInAnotherNuGetProject(nuGetProject, packageIdentity, _solutionManager, CancellationToken.None); } else { _skipPSScriptExecution = false; } if (!_skipPSScriptExecution) { string toolsPath = Path.GetDirectoryName(fullScriptPath); IPSNuGetProjectContext psNuGetProjectContext = nuGetProjectContext as IPSNuGetProjectContext; if (psNuGetProjectContext != null && psNuGetProjectContext.IsExecuting && psNuGetProjectContext.CurrentPSCmdlet != null) { var psVariable = psNuGetProjectContext.CurrentPSCmdlet.SessionState.PSVariable; // set temp variables to pass to the script psVariable.Set("__rootPath", packageInstallPath); psVariable.Set("__toolsPath", toolsPath); psVariable.Set("__package", packageZipArchive); psVariable.Set("__project", envDTEProject); psNuGetProjectContext.ExecutePSScript(fullScriptPath); } else { string command = "$__pc_args=@(); $input|%{$__pc_args+=$_}; & " + PathUtility.EscapePSPath(fullScriptPath) + " $__pc_args[0] $__pc_args[1] $__pc_args[2] $__pc_args[3]; Remove-Variable __pc_args -Scope 0"; object[] inputs = new object[] { packageInstallPath, toolsPath, packageZipArchive, envDTEProject }; string logMessage = String.Format(CultureInfo.CurrentCulture, Resources.ExecutingScript, fullScriptPath); // logging to both the Output window and progress window. nuGetProjectContext.Log(MessageLevel.Info, logMessage); IConsole console = OutputConsoleProvider.CreateOutputConsole(requirePowerShellHost: true); Host.Execute(console, command, inputs); } return(true); } } return(false); }