在.net核心(程序集或nuget)中添加引用的正确方法是什么?

时间:2019-07-07 05:51:46

标签: .net-core

问题: 我在将在Linux docker容器中运行的.net core 2.1库中引用IConfiguration接口

Visual Studio 2019会自动为我提供一个程序集引用。如果我接受,它将引用程序文件目录中的Microsoft.Extensions.Configuration.Abstractions.dll。

但是,我看到该dll也有一个在线的nuget打包器。

说“只信任Visual Studio”很容易,但是在.net框架之前,我遇到了一些问题,在该框架中,VS(或resharper)将在要引用的程序集确实是一部分时尝试添加程序集引用需要添加的软件包。

我是.net的老手,只是选择了.net核心。在这种情况下正确的约定是什么?

1 个答案:

答案 0 :(得分:1)

.NET Core被设计为使用包引用作为引用依赖项的标准方法。进行这种设计选择有几个原因,但是,首要的原因是允许在多个OS和Arch目标上运行代码。因此,建议的创建依赖项的方法是使用包引用。它将允许提取与给定OS和CPU组合相关的软件包。

例如,您可以针对构建Windows,Linux和macOS以及Linux和Windows x64和arm64体系结构,而针对macOS x64体系结构。项目引用软件包将为操作系统和处理器体系结构的给定组合选择适当的软件包,即对于SQLite,它将是win-x64,win-arm64,linux-x64,linux-arm64,macOS-x64软件包版本。 .NET Core程序包和运行时也是如此,这将根据目标平台和目标体系结构的组合进行选择。 Target Framework Moniker抽象了处理所有这些组合的一般概念,除了处理OS和体系结构信息之外,它还可以处理版本依赖性信息。

以上所有都是了解.NET Core中版本控制和OS /体系结构依赖关系处理的基本概念,该概念也在其项目系统中实现。在这种情况下,尽管Visual Studio提出了建议(通常不能总是正常工作),但您应该始终选择nuget包而不是程序集引用。为了验证这一点,可以检查Visual Studio使用的.NET Core项目系统所在的github上的dotent / project-system系统信息库中已关闭或仍在打开的问题的数量。

最后,尽管引用纯IL程序集将起作用,但这并不是未来的证明,因为依赖项的任何更改(使其依赖于平台或体系结构)(即,.NET Core HW内部固有的体系结构特定的优化)都会破坏您的项目。 / p>