如何阅读包中的NuGet包列表.配置编程

本文关键字:列表 配置 编程 包列表 何阅读 包中 NuGet | 更新日期: 2023-09-27 18:16:58

阅读包中列出的包的最佳方法是什么(最好是通过c#) ?配置文件?

在我们的源代码库中,我有很多解决方案和项目,同样也有很多包。配置文件。我正试图在我的源代码存储库中构建一个正在使用的软件包(和版本)的统一列表。

我可以看到有一个NuGet。可用的核心软件包-我如何使用它来实现我的目标?

谢谢

如何阅读包中的NuGet包列表.配置编程

如果您不想直接读取XML,您可以安装NuGet。Core NuGet包,然后使用packagerreference类。

下面是一些示例代码,使用这个类打印出包的id和版本。

string fileName = @"c:'full'path'to'packages.config";
var file = new PackageReferenceFile(fileName);
foreach (PackageReference packageReference in file.GetPackageReferences())
{
    Console.WriteLine("Id={0}, Version={1}", packageReference.Id, packageReference.Version);
}

你需要找到这些包。你可以用目录搜索来做,比如:

foreach (string fileName in Directory.EnumerateFiles("d:'root'path", "packages.config", SearchOption.AllDirectories))
{
    // Read the packages.config file...
}

另一种更新的方法是安装NuGet。打包NuGet包,并使用类似的代码:

var document = XDocument.Load (fileName);
var reader = new PackagesConfigReader (document);
foreach (PackageReference package in reader.GetPackages ())
{
    Console.WriteLine (package.PackageIdentity);
}

根据建议,您需要安装NuGet。核心,您的解决方案可能包含多个项目,因此在安装时知道如何指定项目名称是很好的。假设你的解决方案是MySolution,你有两个项目Project01 &Project02,你只想安装在Project02

Install-Package NuGet.Core -ProjectName Project02

接下来,你需要在whatever.cs页面中添加一个using语句,你要做你的工作来定位包,假设你只想得到版本号,这样你就可以在你网站的某个地方打印出来。这正是我想做的。

using NuGet;

接下来,我想获得一个特定的软件包并读取它的版本号,这样当我们发布我的软件时,我可以在我的网站上的某个地方看到一个视觉标识符,我可以去看看正在生产的版本。

这是我写的代码,在我的页面上填充一个webforms标签。

protected void Page_Load(Object sender, EventArgs e)
    {
        var pkgRefpath = Server.MapPath("~/packages.config");
        PackageReferenceFile nugetPkgConfig = new PackageReferenceFile(pkgRefpath);
        IEnumerable<PackageReference> allPackages = nugetPkgConfig.GetPackageReferences();
        var newtonsoftPkg = (
            from pkg in allPackages
            where pkg.Id == "Newtonsoft.Json"
            select pkg
        ).FirstOrDefault();
        if (newtonsoftPkg== null) return;
            var newtonsoftPkg_Version = newtonsoftPkg.Version;
        ltrNewtonsoftVer.Text = newtonsoftPkg_Version.ToString();
    }

这是一个稍微不同的问题的答案,但这显示了我找到这个问题/答案并修改我学到的东西以满足我自己的需求后,我最终得到的解决方案。我希望它能帮助别人。