public override IEnumerable <string> GetInstalled() { foreach (var directory in new DirectoryInfo(SpecialFolders.Lib).GetDirectories()) { FileInfo specFile = directory .GetFiles("*.nuspec", SearchOption.TopDirectoryOnly) .FirstOrDefault(); if (specFile != null) { ResolverOptions["package"] = directory.Name; NuSpec nuSpec = GetInstalledPackageInfo(); yield return($"{nuSpec.Id} ({nuSpec.Version})"); } } }
private static IEnumerable <ResolvedFileInfo> ResolveFilesUsingComputeFilesToPublish(ProjectInstance projectInstance) { var resolvedFileInfos = new List <ResolvedFileInfo>(); projectInstance.Build("ComputeFilesToPublish", new ILogger[] { new ConsoleLogger(LoggerVerbosity.Minimal) }); foreach (var item in projectInstance.GetItems("ResolvedFileToPublish")) { var assemblyPath = item.EvaluatedInclude; var packageName = item.GetMetadataValue(item.HasMetadata("PackageName") ? "PackageName" : "NugetPackageId"); var packageVersion = item.GetMetadataValue(item.HasMetadata("PackageName") ? "PackageVersion" : "NugetPackageVersion"); if (packageName == string.Empty || packageVersion == string.Empty) { // Skip if it's not a NuGet package continue; } var packagePath = Utils.GetPackagePathFromAssemblyPath(assemblyPath); if (packagePath == null) { throw new ApplicationException($"Cannot find package path from assembly path ({assemblyPath})"); } // TODO: don't think this is reliable because I'm not sure if .nuspec will always be there, or if it will always be named tha way var nuSpecFilePath = Path.Combine(packagePath, $"{packageName}.nuspec"); // Directory.GetFiles(packageFolder, "*.nuspec", SearchOption.TopDirectoryOnly).SingleOrDefault(); var nuSpec = NuSpec.FromFile(nuSpecFilePath); var relativePath = item.GetMetadataValue("RelativePath"); var resolvedFileInfo = new ResolvedFileInfo { SourcePath = assemblyPath, VersionInfo = FileVersionInfo.GetVersionInfo(assemblyPath), NuSpec = nuSpec, RelativeOutputPath = relativePath }; resolvedFileInfos.Add(resolvedFileInfo); } return(resolvedFileInfos); }
private static IEnumerable <ResolvedFileInfo> ResolveFilesUsingResolveAssemblyReferences(ProjectInstance projectInstance) { var resolvedFileInfos = new List <ResolvedFileInfo>(); projectInstance.Build("ResolveAssemblyReferences", new ILogger[] { new ConsoleLogger(LoggerVerbosity.Minimal) }); foreach (var item in projectInstance.GetItems("ReferenceCopyLocalPaths")) { var assemblyPath = item.EvaluatedInclude; var versionInfo = FileVersionInfo.GetVersionInfo(assemblyPath); var resolvedFileInfo = new ResolvedFileInfo { VersionInfo = versionInfo, SourcePath = assemblyPath, RelativeOutputPath = Path.GetFileName(assemblyPath) }; if (item.GetMetadataValue("ResolvedFrom") == "{HintPathFromItem}" && item.GetMetadataValue("HintPath").StartsWith("..\\packages")) { var packagePath = Utils.GetPackagePathFromAssemblyPath(assemblyPath); if (packagePath == null) { throw new ApplicationException($"Cannot find package path from assembly path ({assemblyPath})"); } var nuPkgFileName = Directory.GetFiles(packagePath, "*.nupkg", SearchOption.TopDirectoryOnly).Single(); var nuSpec = NuSpec.FromNupkg(nuPkgFileName); resolvedFileInfo.NuSpec = nuSpec; resolvedFileInfos.Add(resolvedFileInfo); } else { resolvedFileInfos.Add(resolvedFileInfo); } } return(resolvedFileInfos); }
public override bool Remove() { NuSpec nuSpec = GetInstalledPackageInfo(); string extension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".cmd" : ""; try { foreach (var command in nuSpec.Commands.Split(',')) { Logger.LogInformation($"Removing command '{command}'"); File.Delete(Path.Combine(SpecialFolders.Bin, command + extension)); } Directory.Delete(Path.Combine(SpecialFolders.Lib, ResolverOptions["package"]), true); return(true); } catch (Exception ex) { Logger.LogVerbose(ex.ToString()); return(false); } }