首页 > 解决方案 > Azure DevOps 构建管道:从 MsBuild.exe 解决方案创建 NuGet 包

问题描述

我正在尝试构建 Asp.Net 框架 461 Web 应用程序并将 dll 打包在 NuGet 包中,该包将用于在 Octopus 中进行部署。

请注意,我正在使用:

在此处输入图像描述

它构建了解决方案,并将工件以部署包格式与 xxx.deploy 批处理文件打包在一起。但是,当我尝试部署到服务器上时,它迫使我在我不想做的服务器上安装“Web Deploy (msdeploy.exe)”。

NuGet 包的内容如下: 构建的内容嵌入在 zip 文件和额外的部署文件中。

在此处输入图像描述

我们的前 DevOps 之前管理过这些构建,当我将他的 NuGet 包与我的包进行比较时,它们完全不同。在他的版本中,所有 aspx、ascx 和 bin 文件夹都位于 NuGet 包的顶层。

在此处输入图像描述

我想在没有这些额外部署文件的情况下打包我的 NuGet 包。

我的 AzureDevOps 中的当前构建参数是

/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactstagingdirectory)\\"

我尝试将其更改为,/p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=false但仍然无法实现我想要的 NuGet 包格式。

它将生成的输出生成到 -> $myproject\obj\Release\Package\PackageTmp 位置。

我想知道是否有一种方法可以在没有额外的 zip 文件的情况下生成 NuGet 包?还是我需要编写手动 powershell 脚本并执行 Octo.exe 来打包该 ...\PackageTmp 目录下的内容?

无论如何创建 Nuget 包任务来定义我只想打包..\PackageTmp目录?

标签: azureazure-devopsnuget

解决方案


Azure DevOps 构建管道:从 MsBuild.exe 解决方案创建 NuGet 包

事实上,如果你只想打包文件夹中的文件..\PackageTmp,我们必须在你使用的时候为创建八达通包任务的源文件过滤文件/p:WebPublishMethod=Package,因为没有过滤选项Create Octopus Package task

您可以使用带有Contents的复制任务来过滤文件夹中的文件: **\PackageTmp\**PackageTmp

在此处输入图像描述

更重要的是,如果发布方法不是你关心的,使用/p:WebPublishMethod=FileSystem /p:PackageAsSingleFile=false应该更容易解决这个问题。

当我使用以下参数发布 Web 应用程序时:

/p:SkipInvalidConfigurations=true /p:DeployOnBuild=true /p:WebPublishMethod=FileSystem /p:publishUrl="$(build.artifactstagingdirectory)\\" /p:DeployDefaultTarget=WebPublish

然后使用 Octopus 的 Package Application 进行打包:

在此处输入图像描述

最后,我可以得到文件夹中所有文件相同的包PackageTmp

在此处输入图像描述

希望这可以帮助。


推荐阅读