直接添加参考和Nuget添加软件包有什么区别

时间:2019-04-16 04:49:44

标签: c# powershell nuget

我想在我的C#项目中引用system.management.automation.dll中的Powershll5.0,手动添加引用和通过Nuget包添加之间有什么区别?
以及如何保证应用程序运行所在的计算机在参考路径中具有此程序集?即使我在应用程序安装程序中包含了该dll,该dll也不在参考路径中,机器可以自动找到该dll吗?

4 个答案:

答案 0 :(得分:0)

在dll引用角度上没有区别。 NuGet引用最终可以达到对程序集的常规dll引用。 NuGet是一个工具,可以自动向我们添加程序集并对其进行管理。您也可以手动进行管理(通过手动添加参考)。

正如documentation所述,NuGet-package比单个dll参考具有更广泛的概念。单个NuGet程序包中可以有多个dll,其他文件和元数据。

  

简单地说,NuGet包是带有.nupkg的单个ZIP文件。   扩展,其中包含编译后的代码(DLL),以及与   该代码,以及包含如下信息的描述性清单   软件包的版本号。开发人员与代码共享创建   打包并将其发布到公共或私有主机。包   消费者从合适的主机获取这些软件包,然后将其添加到   项目,然后在其项目中调用包的功能   码。然后,NuGet本身会处理所有中间细节。

尽可能使用NuGet。

答案 1 :(得分:0)

  

直接添加引用和添加包有什么区别   通过Nuget

NuGet本质上与手动添加引用没有什么不同,并且最终将引用添加到项目中。它是一种自动向我们添加程序集并对其进行管理的工具,有效地提高了我们开发项目的效率。

有关更多详细信息,您可以检查有关nuget的文档:

  

简单地说,NuGet包是带有.nupkg的单个ZIP文件。   扩展,其中包含编译后的代码(DLL),以及与   该代码,以及包含如下信息的描述性清单   软件包的版本号。开发人员用代码共享创建   打包并将其发布到公共或私有主机。 包装   消费者从合适的主机获取这些软件包,然后将其添加到   项目,然后在其项目中调用包的功能   码。然后,NuGet本身会处理所有中间细节。

     

因为NuGet支持私有主机以及公共nuget.org   主机,则可以使用NuGet程序包共享一个   组织或工作组。您还可以将NuGet软件包用作   一种方便的方法来分解您自己的代码以用于您自己的代码   项目。简而言之,NuGet包是可共享的代码单元,但是   既不要求也不暗示任何特定的共享方式。

     

.nupkg可以包含一堆其他东西吗?   来自.dll(例如文档)?

是的,NuGet软件包可以在软件包中包含指定文件。

  

我为什么要使用其中一个?

Nuget提供了其他一些好处:

  • 它通过添加对必要程序集的引用,创建和添加项目文件(例如配置)等来自动配置项目。
  • 它提供软件包更新。
  • 这一切都非常方便。
  • 我确定一旦使用它,您就会意识到它有很多好处。

我希望这会有所帮助。

答案 2 :(得分:0)

除了回答您的最后一个问题外,我不会提供定义答案

  

如何确保我的应用程序运行所在的计算机在参考路径中具有此程序集?即使我在应用程序安装程序中包含了该dll,该dll也不在参考路径中,机器可以自动找到该dll吗?

据我了解,从Nuget添加dll等效于 将dll下载到packages中,并在.csproj中设置引用路径。但是,手动添加dll并不能保证该dll在那里。

最好在.csproj中有引用路径,以便Visual Studio将这些dll包作为考虑因素放入构建输出文件夹中。总之,如果软件包具有Nuget版本,请使用它。否则,请手动添加。

答案 3 :(得分:0)

您的问题更多地是构建工程,而不是 powershell 。 您应该使用任何语言的程序包管理工具将所有外部或第三方依赖项置于项目之外。 (坚果,人工制品,关系,gradle chache等)

这种方式:

  • 您的项目将在任何环境下都可以工作,并且您无需记录需要在环境中放置的内容以及使其在何处起作用:)

  • 您将有能力在一个地方控制所有与构建或运行时相关的内容。

  • 您将完全控制版本。依赖关系会随时间变化,您可能希望使用旧版本。

  • 您可以在多个地方使用相同的依赖项,而不必将其存储1000次,并确保在所有地方都使用相同的包(单个事实来源)

作为一种好的做法,即使最简单的脚本也应具有一个版本和一个清单文件,其中应提及依赖关系和版本。只是问问自己,如果要再次使用该项目,四年后您需要知道什么。