是否有办法像Visual Studio那样 "安装 "nuget包,但在部署服务器上安装

问题描述 投票:0回答:1

背景:我是一个相当新的包装和出版nuget的人。

我是一个包装和发布nuget的新手。长话短说,我有一个C#项目(我们称它为MYAPI项目),它依赖于一堆其他的nuget包。一些MYAPI的消费者,希望把它作为一个nuget包来引用,并自行处理他们产品的部署,而另一些消费者则希望MYAPI dlls被安装在特定的文件夹中,他们将在运行时从那里获取它。

所以我把MYAPI打包成nuget,并发布到内部的nuget服务器上。

问题:如何安装我的nuget?

我如何将我的nuget包安装到服务器上,使其拥有所有需要的依赖关系。我希望它看起来像 bin\debug 文件夹的样子,即根据目标框架,从所有依赖的nuget包中复制相关文件,包括主nuget包(本例中为MYAPI)。

我知道我可以通过将MYAPI打包成zip文件或msi来实现这个目的,除了nuget包之外。但是我不希望MYAPI有多种类型的包,我希望只用nuget包。我也了解到我可以在我的程序中引用所有的依赖关系。<files> 部分,但我认为这是一个可怜的方法。

有没有一种方法可以像Visual Studio那样做,即下载主nuget包及其所有的依赖项,解压它们,然后将所有解压的nuget包中的相关(基于框架版本的)文件复制到nuspec中。bin\debug 文件夹中。如果这不是开箱即用的,谁能告诉我VS用什么 "情报 "把文件复制到bin/debug文件夹里,这样我就可以在安装脚本中复制它。

EDIT:

这是一个普通的.NET框架项目,我说的是安装在生产服务器上,在那里,像MSBuild,VS这样的开发工具是不可用的。我仍然可以有nuget.exe命令,因为它是一个单一的可执行文件。

c# .net visual-studio nuget continuous-deployment
1个回答
1
投票

有没有一种方法可以像Visual Studio那样 "安装 "nuget包,但在部署服务器上。

我想你对这个问题有一些误解,你要的东西恐怕无法通过以下方式实现。鼻疽.

实际上,MSBuild的工作是将相关的nuget包的内容复制到bin/Debug中。

事实上, MSBuild(MSBuild.exe)是一个带有vs开发环境的可执行文件。

Nuget 只是负责将软件包下载到你的本地,然后将其与你的项目关联。实际的内容复制操作纯粹是由 MSBuild.

VS IDE, MSBuild 是负责这个操作的。当你点击build时(实际上是调用 MSBuild.exe),nuget包的依赖DLL将被复制到你的输出文件夹。

为了证明这一点你可以新建一个空项目,然后安装这个nuget包,然后检查文件是否在bin\Debug下。之后,请执行 构建 来检查文件是否存在。

解决方案

VS2017, MSBuild 可单独安装,无需 VS IDE.

你可以安装 Visual Studio 2019的构建工具.

根据 所有下载--> Visual Studio 2019的工具--> Visual Studio 2019的构建工具

enter image description here

它可以从VS中单独安装,并且是轻量级的,现在很多开发者使用它在生产服务器上构建项目。

当你使用 nuget.exe 在你的项目中安装这样的nuget包,然后使用Build工具执行这样的命令。msbuild xxx\xxx\xxx.csproj -t:build 构建项目。之后,您将在 bin\Debug 文件夹。

更新1

其实nuget的工作是决定要复制哪些相应的依赖关系。但nuget将这些信息传递给 MSBuild. Nuget只需要确定相应的信息,就像制定计划一样,具体的行动由Nuget来执行。MSBuild包括引用、还原、复制等。所以你应该运行 MSBuild 才能得到自己想要的东西,到目前为止。

另外如果你还能得到你想要的东西,并跳过了 MSBuild 要直接获取文件,你可以 向团队提出功能建议(点击 建议功能).


0
投票

你可以使用一个temporarypublish项目。用你想要的任何TFM创建项目,给包添加一个PackageReference,运行 dotnet publish,然后删除 <project_name>.* 从发布目录。

© www.soinside.com 2019 - 2024. All rights reserved.