C# 添加对dll的引用与在.NET标准项目中添加NuGet包

C# 添加对dll的引用与在.NET标准项目中添加NuGet包,c#,.net,.net-standard,C#,.net,.net Standard,我的解决方案中有一个.NET标准2.0项目,我正在使用IConfiguration接口。当我写名称VS时,建议我引用Microsoft.Extensions.Configuration.Abstractions.dll。如果我这样做,它将添加到引用节点下。但是,我也可以将其添加为NuGet包。这两种方法似乎都有效。我假设VS建议的引用是通过项目中引用的.NET标准SDK添加的 建议使用哪种方式添加该引用?每种方法的优缺点是什么?直接从手动下载或安装在已知位置的NuGet软件包中引用DLL可以加快

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


建议使用哪种方式添加该引用?每种方法的优缺点是什么?

直接从手动下载或安装在已知位置的NuGet软件包中引用DLL可以加快恢复和生成过程,但也有一些危险

NuGet包在引用DLL文件时可以做许多事情。如果要引用程序包中的DLL,请确保该程序包不执行以下操作之一/考虑以下可能性:

  • 其他NuGet包可以作为依赖项拉入。如果从较新的包升级DLL,则需要检查依赖项是否已更改,并相应地更新项目
  • NuGet软件包可以提供不同的引用和实现程序集-例如,NuGet软件包可以在其
    ref/
    文件夹中提供一个“API表面”dll,然后在其
    lib/
    文件夹中包含.NET Framework.NET Core、Xamarin等的不同实现程序集。文件夹。您必须小心地为项目类型选择要引用的正确DLL文件-a.NET标准库可能需要引用引用程序集(例如,在编译时使用
    ref/netstandard1.4/foo.dll
    ,使用此库的.NET Framework应用程序需要从
    lib/net452/foo.dll
    引用程序集
  • NuGet软件包可能包含额外的运行时特定信息和/或添加到生成输出中的目标框架特定内容。这可以是本机库(windows上的
    .dll
    ,linux上的
    .so
    等-来自
    运行时/
    子文件夹)或者任何内容文件。在没有NuGet的情况下正确执行此操作是很困难的,因为
    .nuspec
    文件还可以定义内容文件的生成操作
  • 生成逻辑可以包含在NuGet软件包中,这些软件包可以在生成过程中设置产品正确使用所必需的某些属性或执行目标。如果不以正确的方式编辑
    .csproj
    文件,则无法手动执行此操作
如果NuGet软件包不使用上述任何一项(您需要手动检查),您通常可以安全地引用DLL。但是,更新DLL及其依赖项需要大量工作,而且使用NuGet更容易完成


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

我没有给出答案,因为我不确定,但我认为nuget会自动向您的项目添加引用,我更喜欢nuget,因为如果nuget repo中有新版本的话,它允许更新包。您从哪里获得dll引用?它应该是.net标准项目中使用的nuget包。.也不是going给出了一个直接的答案,但有一些事情,例如1.Nuget执行解决方案范围的引用还原2.通过Nuget添加与添加引用3相同的dll。更容易更新/还原到特定版本4。在继续集成/构建服务器期间,它直接从Nuget 5提取。如果使用自定义Nuget提要,则可以是全部/update/re自储feed@MartinUllrich引用来自某个文件夹,如Program Files\dotnet\sdk\NuGetFallbackFolder。它在项目文件中使用旧的引用格式,而不是包引用。@MartynWeber我最初的想法是使用dll引用,这样可以减少依赖项的数量和包引用的复杂性e构建过程。另一方面,现在我已经了解了项目文件引用包的方式,将其引用为NuGet包可能会更简单。谢谢,似乎引用NuGet包本身是一条明确的道路。我本来可以这样做,但VS建议使用此修复方法(直接引用dll)因此,如果工具提示我做其他事情,我想知道我是否做错了。