Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 直接添加引用和通过Nuget添加包有什么区别_C#_Powershell_Nuget - Fatal编程技术网

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

C# 直接添加引用和通过Nuget添加包有什么区别,c#,powershell,nuget,C#,Powershell,Nuget,在我的C#项目中,我想引用来自powershl5.0的system.management.automation.dll,手动添加引用和通过Nuget包添加引用有什么区别? 我如何保证我的应用程序运行的机器在引用路径中有这个程序集?即使我在应用程序安装程序中包含此dll,此dll也不在引用路径中,计算机能否自动定位此dll?dll引用角度没有差异。NuGet引用最终成为对程序集的正常dll引用。NuGet是一个自动向我们添加程序集并对其进行管理的工具。您还可以手动进行管理(通过手动添加引用) 如前

在我的C#项目中,我想引用来自
powershl5.0
system.management.automation.dll
,手动添加引用和通过Nuget包添加引用有什么区别?

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

dll引用角度没有差异。NuGet引用最终成为对程序集的正常dll引用。NuGet是一个自动向我们添加程序集并对其进行管理的工具。您还可以手动进行管理(通过手动添加引用)

如前所述,NuGet包的概念比单个dll引用更广泛。在单个NuGet包中可以有多个dll、其他文件和元数据

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

尽可能使用NuGet

直接添加引用和添加包有什么区别 努吉

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

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

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

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

就是这样,nupkg可以包含一大堆其他的东西 从.dll(例如,文档)下载

是的,NuGet包可能包括在包中指定文件

我为什么要用其中一个呢

Nuget还提供了几个额外的好处:

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

我希望这会有所帮助。

我不打算提供定义答案,只想回答你的最后一个问题

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

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


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

您的问题更像是一个构建工程,然后是powershell特定的问题。 您应该使用任何语言的包管理工具将所有外部或第三方依赖项放到项目之外。(nuget、artifactory、nexus、gradle chache等)

这样:

  • 您的项目在任何环境中都可以运行,您不需要记录需要在您的环境中放置什么以及在何处运行:)

  • 您可以在一个地方控制作为构建或运行时依赖项的所有内容

  • 您将完全控制这些版本。依赖项会随着时间的推移而变化,您可能希望坚持使用较旧的版本

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


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

当我使用NuGet时,它将帮助我添加程序集,我是否还需要将这些程序集与exe一起复制到机器上并运行到服务器上?是的。运行应用程序时需要引用的程序集exe如何定位dll?它们不在引用路径中通常引用的程序集需要位于与相同的目录中。exe我已尝试使用exe can r