.net core 什么';在.NETCore中添加引用的正确方法是什么?

.net core 什么';在.NETCore中添加引用的正确方法是什么?,.net-core,.net Core,问题: 我正在引用.net core 2.1库中的IConfiguration接口,该库将在linux docker容器中运行 Visual Studio 2019自动为我添加程序集引用。如果接受,它将引用程序文件目录中的Microsoft.Extensions.Configuration.Abstractions.dll 但是,我看到在线上也有一个用于此dll的nuget打包程序 说“只需信任visual studio”很容易,但我以前在.net framework中遇到过一些问题,在该框架中

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

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

但是,我看到在线上也有一个用于此dll的nuget打包程序

说“只需信任visual studio”很容易,但我以前在.net framework中遇到过一些问题,在该框架中,当需要引用的程序集实际上是需要添加的包的一部分时,VS(或resharper)将尝试添加程序集引用


我对.net的使用时间很长,只是在学习.net核心。在这种情况下,正确的约定是什么?

.NET Core设计时使用包引用作为引用依赖项的标准方式。选择这种设计有几个原因,但是,主要原因是允许在多个OS和arch目标上运行代码。因此,建议使用包引用来创建依赖项。它将允许获取与给定操作系统和CPU组合相关的包

例如,您可以针对Windows、Linux和macOS以及Linux、Windows x64和arm64体系结构构建目标,而针对macOS x64体系结构构建目标。项目参考包将针对操作系统和处理器体系结构的特定组合选择合适的包,即对于SQLite,它将是win-x64、win-arm64、linux-x64、linux-arm64、macOS-x64包版本。对于.NET核心包和运行时也是如此,它们将根据目标平台和目标体系结构的组合进行选择。处理所有这些组合的一般概念是由目标框架名字对象抽象的,该名字对象除了处理操作系统和体系结构信息外,还允许处理版本依赖信息

所有这些都是理解.NET Core中版本控制和OS/architecture依赖关系处理的基本概念,它也在其项目系统中实现。在您的情况下,您应该始终选择nuget包而不是程序集引用,尽管VisualStudio提出的建议通常并不总是正确的。要验证这一点,可以检查VisualStudio使用的.NET核心项目系统所在的github上的dotent/project系统存储库中已关闭或仍打开的问题数量


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

请将实际项目文件粘贴为问题的一部分。我将使用nuget,因为不能保证所有计算机的程序文件文件夹都位于同一位置。另外,在使用nuget而不是程序集引用时,更容易确保所有项目具有相同的版本。