/// <summary> /// Возвращает наименьшую поддерживаемую версию фреймворка для указанного пакета. /// </summary> /// <param name="packageIdentity">Идентификатор пакета.</param> private NuGetFramework GetPackageLowestSupportedFramework(PackageIdentity packageIdentity) { var packagePath = GetPackagePath(packageIdentity); using (var reader = new PackageFolderReader(packagePath)) { // Выбираются только поддерживаемые TargetFramework, содержащие файлы в каталоге 'lib' return reader.GetLibItems() .OrderBy(i => i.TargetFramework, NuGetFrameworkComparer) .FirstOrDefault(i => NuGetFrameworkComparer.Compare(i.TargetFramework, NuGetFramework.AnyFramework) != 0 && !i.TargetFramework.IsUnsupported && i.Items != null && i.Items.Any())?.TargetFramework; } }
/// <summary> /// Добавляет в содержимое пакета совместимые версии файлов из указанного пакета. /// </summary> /// <param name="packageContent">Содержимое пакета.</param> /// <param name="packageIdentity">Идентификатор пакета.</param> /// <param name="targetFramework">Версия совместимого фреймворка.</param> /// <param name="compatibilityProvider">Провайдер для проверки совместимости фреймворков.</param> private void FillPackageContent(PackageContent packageContent, PackageIdentity packageIdentity, NuGetFramework targetFramework, IFrameworkCompatibilityProvider compatibilityProvider) { var packagePath = GetPackagePath(packageIdentity); using (var reader = new PackageFolderReader(packagePath)) { var libItems = GetCompatibleItems(reader, reader.GetLibItems().ToList(), targetFramework, compatibilityProvider); if (libItems?.Items != null) { foreach (var item in libItems.Items) { var installItem = GetPackageItem(packagePath, item, PackagingConstants.Folders.Lib, libItems.TargetFramework); packageContent.Lib.Add(installItem); } } var contentItems = GetCompatibleItems(reader, reader.GetContentItems().ToList(), targetFramework, compatibilityProvider); if (contentItems?.Items != null) { foreach (var item in contentItems.Items) { var installItem = GetPackageItem(packagePath, item, PackagingConstants.Folders.Content, contentItems.TargetFramework); packageContent.Content.Add(installItem); } } var pluginItems = GetCompatibleItems(reader, reader.GetPluginItems().ToList(), targetFramework, compatibilityProvider); if (pluginItems?.Items != null) { foreach (var item in pluginItems.Items) { var installItem = GetPackageItem(packagePath, item, PluginFolderName, pluginItems.TargetFramework); packageContent.Plugin.Add(installItem); } } } }