[英]How do I Install, Update, Register a Nuget package on the Web Server that does not have Nuget or Visual Studio installed?
[英]Is there a way to "install" nuget package like the way Visual Studio does, but on a deployment server
背景:
我对打包和发布 nuget 相当陌生。长话短说,我有一个 C# 项目(我们称之为 MYAPI 项目),它依赖于一堆其他 nuget 包。 MYAPI 的一些消费者希望将其引用为 nuget package 并自行处理其产品的部署,而其他一些消费者希望 MYAPI dll 安装在特定文件夹中,他们将在运行时从中获取它。
所以我将 MYAPI 打包为 nuget 并将其发布到内部 nuget 服务器上。
问题:
如何将我的 nuget package 安装到服务器上,使其具有所有必需的依赖项。 我希望它看起来像bin\debug
文件夹的样子,即基于目标框架,从所有依赖项 nuget 包中复制相关文件,包括主要的 nuget package(在本例中为 MYAPI)
我知道除了 nuget package 之外,我可以通过将 MYAPI 打包为 zip 文件或 msi 来实现这一点。但是我不希望 MYAPI 有多种类型的包,并且宁愿只使用 nuget package。我也明白我可以引用 nuspec 的<files>
部分中的所有依赖项,但我认为这是一个穷人的做法。
有没有办法像 Visual Studio 那样做,即下载 main nuget package 及其所有依赖项,解压缩它们,然后将所有解压缩的 nuget 包中的相关(基于框架版本)文件复制到bin\debug
文件夹中。 如果那不是开箱即用的,有人可以告诉我 VS 用来将文件复制到 bin\debug 文件夹的“智能”,这样我就可以在安装脚本中复制它。
编辑:
这是一个常规的 .NET 框架项目,我说的是在生产服务器上安装,其中 MSBuild 等开发工具不可用,VS 将不可用。 我仍然可以使用 nuget.exe 命令,因为它是一个可执行文件。
有没有办法像 Visual Studio 那样“安装”nuget package,但是在部署服务器上
我想你对这个问题有些误解,恐怕nuget无法实现你想要的。
实际上,将nuget相关包的内容复制到bin\Debug中是MSBuild的工作。
其实MSBuild ( MSBuild.exe
)是一个带有vs开发环境的可执行文件。
Nuget只是负责将package下载到你的本地,然后关联到你的项目中。 实际的内容复制操作纯粹是MSBuild的工作。
在VS IDE中, MSBuild负责这个操作。 当你点击构建时(实际上它调用了 MSBuild.exe ), nuget package 的依赖DLL将被复制到你的 output 文件夹中。
为了证明这一点,你可以新建一个空项目,然后安装这个nuget package,然后检查文件是否在bin\Debug下。 之后,请执行Build检查文件是否存在。
解决方案
从VS2017开始,可以单独安装MSBuild ,不用VS IDE 。
您可以安装Build Tool for Visual Studio 2019 。
在所有下载下 --> Visual Studio 2019 工具--> Visual Studio 2019构建工具
由于它可以独立于VS安装且轻量级,所以现在很多开发者使用它在生产服务器上构建项目。
当你使用nuget.exe
在你的项目中安装这样的 nuget package 然后使用构建工具执行这样的命令msbuild xxx\xxx\xxx.csproj -t:build
来构建项目。 之后,您将在bin\Debug
文件夹中看到它们。
更新 1
实际上,nuget 的作用是决定复制哪些对应的依赖项。 但是 nuget 将这些信息传递给MSBuild 。 Nuget只是确定相应的信息,就像制定计划一样,具体的动作由MSBuild执行,包括引用、恢复、复制等。 所以你应该运行MSBuild来得到你想要的。
另外,如果你仍然得到你想要的并跳过MSBuild直接获取文件,你可以向团队建议一个功能。(点击建议一个功能)。
您可以使用临时/发布项目。 使用所需的任何 TFM 创建项目,将 PackageReference 添加到 package,运行do.net publish
,然后从发布目录中删除<project_name>.*
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.