繁体   English   中英

有没有办法像 Visual Studio 那样“安装”nuget package,但是在部署服务器上

[英]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的工作。

其实MSBuildMSBuild.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM