azure - Azure DevOps 构建管道:从 MsBuild.exe 解决方案创建 NuGet 包
问题描述
我正在尝试构建 Asp.Net 框架 461 Web 应用程序并将 dll 打包在 NuGet 包中,该包将用于在 Octopus 中进行部署。
请注意,我正在使用:
- ADO中的内置构建解决方案任务。
- Octopus提供的内置Create Octopus Package任务来打包NuGet pkg
它构建了解决方案,并将工件以部署包格式与 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
目录?
解决方案
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
:
希望这可以帮助。