繁体   English   中英

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

[英]Add Reference to dll vs. adding a NuGet package in .NET Standard project

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

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

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

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

  • 可以将其他NuGet包作为依赖项引入。 如果从较新的程序包升级DLL,则需要检查依赖项是否已更改并相应地更新项目。
  • NuGet包可以提供不同的引用和实现程序集 - 例如,NuGet包可以在其ref/文件夹中提供“API表面”dll,然后在其lib/包含.NET Framework .NET Core,Xamarin等的不同实现程序集。 夹。 您必须小心选择正确的DLL文件以引用项目类型 - .NET标准库可能需要引用ref-assembly(例如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机器上构建)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM