ASP.NET Core 2.2 - 如何从项目引用的程序集中检索NuGet包依赖
创始人
2024-09-14 15:30:46
0

要从项目引用的程序集中检索NuGet包的依赖,可以使用以下解决方法:

  1. 在ASP.NET Core 2.2项目中,使用NuGet包管理器安装以下两个包:

    • Microsoft.Extensions.DependencyModel
    • NuGet.Protocol
  2. 在需要检索NuGet包依赖的代码文件中,添加以下代码:

using Microsoft.Extensions.DependencyModel;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;
using System;
using System.Collections.Generic;
using System.Linq;

public static class NuGetDependencyHelper
{
    public static IList GetNuGetPackageDependencies(string assemblyPath)
    {
        var dependencies = new List();

        var dependencyContext = DependencyContext.Load(assemblyPath);
        var nuGetRepository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");

        foreach (var target in dependencyContext.Targets)
        {
            var framework = target.Framework;
            var runtimeIdentifier = target.RuntimeIdentifier;

            var dependenciesByFramework = target
                .Dependencies
                .Where(d => d.Type == "package")
                .GroupBy(d => d.Name);

            foreach (var dependencyGroup in dependenciesByFramework)
            {
                var dependency = dependencyGroup.First();
                var packageIdentity = new PackageIdentity(dependency.Name, dependency.Version);

                var resource = nuGetRepository
                    .GetResource();

                var versions = resource
                    .GetAllVersionsAsync(dependency.Name, new SourceCacheContext())
                    .ConfigureAwait(false)
                    .GetAwaiter()
                    .GetResult();

                var maxVersion = versions
                    .Where(v => v.Version.Major == packageIdentity.Version.Major)
                    .OrderByDescending(v => v.Version)
                    .FirstOrDefault();

                dependencies.Add(new NuGetPackage
                {
                    Name = dependency.Name,
                    Version = packageIdentity.Version.ToString(),
                    TargetFramework = framework,
                    RuntimeIdentifier = runtimeIdentifier,
                    LatestVersion = maxVersion?.Version.ToString()
                });
            }
        }

        return dependencies;
    }
}

public class NuGetPackage
{
    public string Name { get; set; }
    public string Version { get; set; }
    public string TargetFramework { get; set; }
    public string RuntimeIdentifier { get; set; }
    public string LatestVersion { get; set; }
}
  1. 使用GetNuGetPackageDependencies方法来获取指定程序集的NuGet包依赖。例如:
var assemblyPath = "path/to/your/assembly.dll";
var dependencies = NuGetDependencyHelper.GetNuGetPackageDependencies(assemblyPath);

foreach (var dependency in dependencies)
{
    Console.WriteLine($"Name: {dependency.Name}");
    Console.WriteLine($"Version: {dependency.Version}");
    Console.WriteLine($"Target Framework: {dependency.TargetFramework}");
    Console.WriteLine($"Runtime Identifier: {dependency.RuntimeIdentifier}");
    Console.WriteLine($"Latest Version: {dependency.LatestVersion}");
    Console.WriteLine();
}

这将打印出程序集的每个NuGet包依赖的名称、版本、目标框架、运行时标识和最新版本。

相关内容

热门资讯

重大科普!家乡大贰小程序辅助器... 重大科普!家乡大贰小程序辅助器,微乐家乡app插件(有挂教程辅助开挂挂);亲,家乡大贰小程序辅助器这...
重大发现!荔枝竞技通用辅助器,... 重大发现!荔枝竞技通用辅助器,科乐填大坑辅助码(有挂秘诀辅助开挂挂);无需打开直接搜索微信(1367...
教程攻略!新海豚辅助工具,九酷... 您好:这款新海豚辅助工具游戏是可以开挂的,确实是有挂的,很多玩家在这款新海豚辅助工具游戏中打牌都会发...
交流学习经验!新海贝辅助器,决... >>您好:决战卡五星最新辅助确实是有挂的,很多玩家在这款决战卡五星最新辅助游戏中打牌都会发现很多用户...
发现玩家!家乡大贰辅助,嗨动互... >>您好:嗨动互动辅助确实是有挂的,很多玩家在这款嗨动互动辅助游戏中打牌都会发现很多用户的牌特别好,...
玩家必知教程!丽水都来脚本辅助... 玩家必知教程!丽水都来脚本辅助,微信中至有辅助吗(有挂规律开挂辅助工具);无需打开直接搜索加(薇:1...
查到实测辅助!牌乐门黑科技,皇... 查到实测辅助!牌乐门黑科技,皇豪互众辅助软件是干嘛的(有挂规律辅助插件)1、下载安装好牌乐门黑科技,...
重磅来袭!广东潮汕雀友会插件,... 重磅来袭!广东潮汕雀友会插件,葫芦娃辅助修改器下载(有挂功能开挂辅助脚本);无需打开直接搜索薇:13...
玩家爆料!相约十三张辅助,反杀... 相约十三张辅助是一款专注玩家量身打造的游戏记牌类型软件,在相约十三张辅助这款游戏中我们可以记录下每张...
避坑细节!牵手辅助器,微友辅助... 避坑细节!牵手辅助器,微友辅助器免费版(有挂方略辅助开挂下载);无需打开直接搜索薇:13670430...