【问题标题】:Add Reference to dll vs. adding a NuGet package in .NET Standard project添加对 dll 的引用与在 .NET Standard 项目中添加 NuGet 包
【发布时间】:2019-01-11 07:34:20
【问题描述】:

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

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

【问题讨论】:

  • 我没有给出答案,因为我不确定,但我认为 nuget 会自动添加对您的项目的引用,我更喜欢 nuget,因为它允许在有新版本的情况下更新包在 nuget 存储库中。
  • 从哪里获得 dll 引用?它应该是.net标准项目中使用的nuget包..
  • 也不会给出直接答案,但有一些事情,例如 1. Nuget 执行解决方案范围的引用恢复 2. 通过 nuget 添加添加与添加引用相同的 dll 3. 更容易更新 /恢复到特定版本 4。在继续集成/构建服务器期间,它直接从 nuget 5 中提取。如果使用自定义 nuget 提要,您可以从自己的提要中安装/更新/恢复
  • @MartinUllrich 引用来自某个文件夹,如 Program Files\dotnet\sdk\NuGetFallbackFolder 它在项目文件中使用旧的引用格式而不是包引用。
  • @MartynWeber 我最初的想法是使用 dll 引用,这样可以减少依赖项的数量和构建过程的复杂性。另一方面,现在我已经查看了项目文件引用包的方式,它可能更简单地引用为 NuGet 包。

标签: c# .net .net-standard


【解决方案1】:

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

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

  • 可以将其他 NuGet 包作为依赖项引入。如果您从较新的包升级 DLL,则需要检查依赖项是否已更改并相应地更新项目。
  • NuGet 包可以提供不同的参考和实现程序集 - 例如。 NuGet 包可能会在其 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 引用程序集。
  • NuGet 包可能包含添加到构建输出的附加运行时特定和/或目标框架特定内容。这可以是本机库(Windows 上的.dll,Linux 上的.so 等-来自runtime/ 子文件夹)或任何内容文件。在没有 NuGet 的情况下实现这一点很棘手,因为 .nuspec 文件还可以为内容文件定义构建操作。
  • 构建逻辑可以包含在 NuGet 包中,这些包在构建期间设置某些属性或执行目标,这是正确使用产品所必需的。如果不以正确的方式编辑 .csproj 文件,这是不可能手动完成的。

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

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

【讨论】:

  • 谢谢,似乎引用 NuGet 包本身是明确的方法。我本来会这样做,但 VS 建议进行此修复(直接引用 dll),所以我想知道如果工具提示我不这样做,我是否做错了。
  • 我们能否在 Nuget 包中添加预编译视图,并在已安装的应用程序中引用该预编译视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 1970-01-01
  • 2014-10-25
  • 2015-10-18
  • 1970-01-01
  • 2016-01-22
  • 1970-01-01
相关资源
最近更新 更多