直接添加引用和通过Nuget添加包的区别是什么?

4
我想在我的C#项目中引用来自Powershell5.0的system.management.automation.dll,手动添加引用和通过Nuget包添加引用有什么区别?如何确保运行我的应用程序的计算机在引用路径中具有这个程序集?即使我在我的应用程序安装程序中包含了这个dll,但它不在引用路径中,计算机能否自动定位到这个dll?
4个回答

1

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

NuGet本质上与手动添加引用没有区别,最终都会将引用添加到项目中。它是一种自动向我们添加程序集并管理它们的工具,有效提高了我们开发项目的效率。

更多详情,请查看关于NuGet的文档:

简单来说,NuGet包是一个带有.nupkg扩展名的单个ZIP文件,其中包含已编译的代码(DLL)、与该代码相关的其他文件以及包括包版本号等信息的描述性清单。具有要共享的代码的开发人员创建包并将其发布到公共或私有主机。包使用者从适当的主机获取这些包,将它们添加到他们的项目中,然后在项目代码中调用包的功能。然后,NuGet本身处理所有中间细节。由于NuGet支持公共nuget.org主机以及私有主机,因此您可以使用NuGet包来共享专属于组织或工作组的代码。您还可以使用NuGet包作为一种方便的方式来为自己的项目分解代码。简而言之,NuGet包是可共享的代码单元,但不需要也不意味着任何特定的共享方式。
是的,NuGet包可以包含指定的文件。

我应该使用哪个?

Nuget 提供了一些额外的好处:

  • 它会自动配置您的项目,添加必要的程序集引用,创建和添加项目文件(例如配置)等。
  • 它提供包更新。
  • 它非常方便。
  • 我相信一旦您开始使用它,您会意识到它有很多好处。

希望这可以帮到您。


0

从dll引用的角度来看,NuGet引用与普通dll引用没有区别。 NuGet是一种工具,可以自动向我们添加程序集并管理它们。您也可以手动进行管理(通过手动添加引用)。正如文档所述,NuGet包是比单个dll引用更广泛的概念。单个NuGet包中可以包含多个dll、其他文件和元数据。

简而言之,NuGet包是一个带有.nupkg扩展名的单个ZIP文件,其中包含编译代码(DLL)、与该代码相关的其他文件以及包括包版本号等信息的描述性清单。有代码要共享的开发人员创建包并将其发布到公共或私有主机。包使用者从合适的主机获取这些包,将它们添加到他们的项目中,然后在他们的项目代码中调用包的功能。NuGet本身处理所有中间细节。

尽可能使用NuGet。


当我使用NuGet时,它会帮助我添加程序集,那么我是否还需要将这些程序集与exe一起复制到运行它的服务器上? - Devssssss
是的,运行应用程序时需要引用程序集。 - Risto M
可执行文件如何定位动态链接库?它们不在引用路径中。 - Devssssss
通常被引用的程序集需要与.exe文件在同一个目录下。 - Risto M
我尝试运行exe,发现不需要复制System.management.automation.dll文件,这是因为在安装Windows SDK时已经安装了该dll文件吗?所以我是否需要将其与exe一起复制? - Devssssss

0

我不会提供定义答案,但是回答你的最后一个问题

我如何保证我的应用程序运行的机器在引用路径中有这个程序集?即使我在我的应用程序安装程序中包含了这个dll,这个dll也不在引用路径中,机器能自动定位到这个dll吗?

据我所知,从Nuget添加dll等同于将dll下载到packages并在.csproj中设置引用路径。但手动添加dll不能保证该dll存在。

最好在.csproj中设置引用路径,这样Visual Studio将把这些dll包考虑进您的构建输出文件夹中。总之,如果包有Nuget版本,请使用它;否则,手动添加它。


0

你的问题更多是关于构建工程而不是 powershell 的具体问题。 你应该使用任何语言的软件包管理工具来将所有外部或第三方依赖项放在项目之外。 (nuget、artifactory、nexus、gradle cache等)

这样做的好处:

  • 您的项目将在任何环境中都能正常工作,而无需记录需要放置在环境中的内容和位置 :)

  • 您将拥有一种方法,在单个位置控制作为构建或运行时依赖项的所有内容。

  • 您将完全控制版本。依赖性会随时间而改变,您可能想坚持使用旧版本。

  • 您可以在多个地方使用相同的依赖项,而无需将其存储1000次,并确保它在使用的每个地方都是相同的软件包 (单一真相来源)

作为良好的实践,即使是最简单的脚本也应该有一个版本和清单文件,提到了依赖关系和版本。只要问问自己,如果您想再次使用该项目,经过4年后,您需要知道什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接