如何从引用的NuGet包中正确选择程序集

本文关键字:包中正 选择 程序集 NuGet 引用 | 更新日期: 2023-09-27 18:27:53

我正在使用NuGet.Core库以编程方式安装包;这也会自动安装包的所有依赖项,但其中一些包是多目标的,并且包含不同.NET版本的多个版本的程序集
如何从这些多目标程序包中选择正确版本的程序集(即,以与从Visual Studio中手动安装NuGet程序包时相同的方式)?

如何从引用的NuGet包中正确选择程序集

您可以使用VersionUtility类来查找兼容项。这就是NuGet在将NuGet包安装到项目中时所做的操作。传递所有项的列表(如NuGet包中的引用)和目标框架名称(如".NETFramework,Version=4.0"),VersionUtility类将返回兼容项。

一些示例代码取自NuGet.Core并稍作修改:

List<IPackageAssemblyReference> assemblyReferences =
    GetCompatibleItems(package.AssemblyReferences).ToList();
static IEnumerable<T> GetCompatibleItems<T>(FrameworkName targetFramework, IEnumerable<T> items) where T : IFrameworkTargetable
{
        IEnumerable<T> compatibleItems;
        if (VersionUtility.TryGetCompatibleItems(targetFramework, items, out compatibleItems))
        {
                return compatibleItems;
        }
        return Enumerable.Empty<T>();
}