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

时间:2015-12-24 09:17:38

标签: c# .net visual-studio nuget

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

1 个答案:

答案 0 :(得分:1)

您可以使用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>();
}