如何从引用的 NuGet 包中正确选择程序集?
How do I properly choose assemblies from referenced NuGet packages?
我正在使用 NuGet.Core 库以编程方式安装包;这也会自动安装包的所有依赖项,但其中一些包是多目标的,并且包含针对不同 .NET 版本的多个版本的程序集。
如何从这些多目标包中选择正确版本的程序集(即与从 Visual Studio 中手动安装 NuGet 包时的方式相同)?
您可以使用 VersionUtility class 查找兼容项目。这是在将 NuGet 包安装到项目中时 NuGet 所做的。您传递所有项目的列表,例如 NuGet 包中的引用,以及目标框架名称,例如“.NETFramework,Version=4.0”,VersionUtility class 将 return 兼容的项目.
一些示例代码取自 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>();
}
我正在使用 NuGet.Core 库以编程方式安装包;这也会自动安装包的所有依赖项,但其中一些包是多目标的,并且包含针对不同 .NET 版本的多个版本的程序集。
如何从这些多目标包中选择正确版本的程序集(即与从 Visual Studio 中手动安装 NuGet 包时的方式相同)?
您可以使用 VersionUtility class 查找兼容项目。这是在将 NuGet 包安装到项目中时 NuGet 所做的。您传递所有项目的列表,例如 NuGet 包中的引用,以及目标框架名称,例如“.NETFramework,Version=4.0”,VersionUtility class 将 return 兼容的项目.
一些示例代码取自 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>();
}