添加对dll的引用与在.NET Standard项目中添加NuGet包

时间:2017-09-20 09:55:42

标签: c# .net .net-standard

我的解决方案中有一个.NET Standard 2.0项目,我正在使用IConfiguration接口。当我写名称VS建议我引用Microsoft.Extensions.Configuration.Abstractions.dll。如果我这样做,则添加在参考节点下。但是我也可以将它添加为NuGet包。两种方式似乎都有效。我假设参考VS建议是通过项目中引用的.NET Standard SDK添加的。

添加该引用的推荐方法是什么?每种方法有哪些优点和缺点?

1 个答案:

答案 0 :(得分:9)

直接从手动下载或安装在已知位置的NuGet包引用DLL,可以加快恢复和构建过程,但存在一些危险。

当引用DLL文件时,NuGet包可以执行许多操作。如果要从包中引用DLL,请确保该包不会执行以下/ account之一以实现以下可能性:

  • 可以将其他NuGet包作为依赖项引入。如果从较新的软件包升级DLL,则需要检查依赖项是否已更改并相应地更新项目。
  • NuGet包可以提供不同的参考和实现程序集 - 例如NuGet包可以在其ref/文件夹中提供“API surface”dll,然后在其lib/中包含.NET Framework .NET Core,Xamarin等的不同实现程序集。夹。您必须小心选择正确的DLL文件以引用项目类型 - .NET标准库可能需要在编译期间引用引用程序集(例如ref/netstandard1.4/foo.dll和使用此引用的.NET Framework应用程序库需要从例如lib/net452/foo.dll
  • 引用程序集
  • NuGet包可能包含添加到构建输出的其他特定于运行时的内容和/或特定于目标框架的内容。这可以是本机库(Windows上的.dll,Linux上的.so等 - 来自runtime/子文件夹)或任何内容文件。在没有NuGet的情况下实现这一点很棘手,因为.nuspec文件还可以定义内容文件的构建操作。
  • 构建逻辑可以包含在NuGet包中,这些包在构建期间设置某些属性或执行目标,这是正确使用产品所必需的。如果不以正确的方式编辑.csproj文件,则无法手动执行此操作。

如果NuGet包不使用上述任何一个(您需要手动检查),则通常可以安全地引用DLL。但是,更新DLL及其依赖项是很多工作,使用NuGet更容易。

此外,您提到您直接从.NET Core工具中的nuget fallback文件夹引用。此文件夹不保证在其他安装中包含DLL的特定版本(取决于安装的SDK版本),甚至可能安装在不同计算机上的不同位置,使您的项目文件无法用于其他工作人员(以及在非Windows机器上构建。)