我在我的解决方案中有一个.NET Standard 2.0项目,并且我正在使用IConfiguration接口。当我输入名称时,VS建议我引用Microsoft.Extensions.Configuration.Abstractions.dll。如果我这么做,它将添加到参考节点下。但是我也可以将其作为NuGet包添加。两种方法似乎都可以工作。我认为,VS建议的参考是通过项目中引用的.NET Standard SDK添加的。
哪种方式是推荐的引用方法?每种方法的优缺点是什么?
我在我的解决方案中有一个.NET Standard 2.0项目,并且我正在使用IConfiguration接口。当我输入名称时,VS建议我引用Microsoft.Extensions.Configuration.Abstractions.dll。如果我这么做,它将添加到参考节点下。但是我也可以将其作为NuGet包添加。两种方法似乎都可以工作。我认为,VS建议的参考是通过项目中引用的.NET Standard SDK添加的。
哪种方式是推荐的引用方法?每种方法的优缺点是什么?
从手动下载的NuGet包或安装在已知位置的NuGet包中直接引用DLL文件可以加快还原和构建过程,但也存在一些危险。
NuGet包在被引用时可以执行许多DLL文件无法执行的操作。如果想要从包中引用DLL,请确保包不会执行以下操作/考虑以下可能性:
ref/
文件夹中提供“API表面”的dll,然后在其lib/
文件夹中包含针对.NET Framework、.NET Core、Xamarin和更多的不同实现程序集。你必须仔细选择要引用于项目类型的正确DLL文件 - .NET Standard库可能需要引用一个ref-assembly(例如,ref/netstandard1.4/foo.dll
)进行编译,而使用此库的.NET Framework应用程序需要引用来自例如lib/net452/foo.dll
的程序集。.dll
,在Linux上是.so
- 来自于runtime/
子文件夹),也可能是任何内容文件。在没有NuGet的情况下正确处理这些内容很棘手,因为.nuspec
文件还可以为内容文件定义构建操作。.csproj
文件。如果NuGet包不使用上述任何一个(您需要手动检查),则通常可以安全地引用DLL。但是,更新DLL及其依赖项需要大量工作,使用NuGet更容易。
此外,您提到直接从.NET Core工具的nuget回退文件夹中引用。此文件夹不能保证包含其他安装中DLL的特定版本(取决于已安装的SDK版本),甚至可能在不同的机器上安装在不同的位置,使您的项目文件对其他人无法使用(以及在非Windows机器上构建)。