有没有办法在命令行中检查 NuGet 包是否支持 .Net 标准?



我有一个列表,其中包含我的项目所依赖的 100 多个 NuGet 包。有没有办法检查这些包中哪些支持 .Net 标准,哪些不支持(无需逐个检查并检查(?

可以使用 NuGet 包库从任何包中读取框架(如果磁盘上有框架(。请考虑以下代码作为示例 -

class Program
{
static void Main(string[] args)
{
var directory = @"F:validationtest-local-source";
foreach (var file in Directory.GetFiles(directory, "*.nupkg", SearchOption.AllDirectories))
{
CheckPackage(file);
}
}
private static void CheckPackage(string path)
{
using (var package = new PackageArchiveReader(path))
{
var frameworks = package
.GetSupportedFrameworks()
.Where(f => f.DotNetFrameworkName.IndexOf(".NETStandard", StringComparison.OrdinalIgnoreCase) >= 0);
if (frameworks.Any())
{
Console.WriteLine($"{Path.GetFileNameWithoutExtension(path)}: {string.Join(";", frameworks)}");
}
else
{
Console.WriteLine($"{Path.GetFileNameWithoutExtension(path)}: ERROR");
}
}
}
}

在这里,我们在 main 方法中以directory遍历每个包并检查每个包。对于每个包,我们将其解析为读取包文件并提取包中的所有元数据的PackageArchiveReader。然后,可以查询包支持的框架。

您将需要以下参考来运行此代码 -

using NuGet.Packaging;
using System;
using System.IO;
using System.Linq;

唯一剩下的就是将所有软件包都放在一个公共目录中。如果您使用的是 packages.config 类型的项目,则可以打开解决方案目录,并且应该有一个包目录。将其作为根目录传递。

最新更新