如何将 azure pipelines dotnet 输入传递给 linux dotnet 二进制文件

How to pass azure pipelines dotnet inputs to the linux dotnet binary

我正在尝试使用 CLI dotnet 命令复制以下 Azure 管道:

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

到目前为止,我可以构建项目,但从中获取 zip 文件似乎有问题 - 传递输入 zipAfterPublish 等似乎无法通过,尽管有一些零散的文档表明这些可以通过 - p:"optiona=x;optionb=y" 或 /p:"optiona=x;optionb=y"。我找不到关于此的权威文档。

这就是我所拥有的 - 构建部分有效,$PWD/out 目录中填充了许多文件,但没有压缩文件:

dotnet publish --configuration Release --output $PWD/out /p:"zipAfterPublish=true;publishWebProjects=true"

我猜这是关于如何将输入 (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops) 正确传递给命令的。

I am trying to replicate the following Azure pipeline using the CLI dotnet command:

1.The zipAfterPublishDotnet Publish 任务中可用的一个选项。如果你检查 dotnet publish 任务的日志,你会发现它没有将任何 属性 像 zipAfterPublish 传递给命令:

因为只有 msbuild 属性 可以通过这种方式传递:/p:xxx=xxxzipAfterPublish 在命令行中不起作用,因为它不是 msbuild 属性,dotnet cli 不支持该选项,仅在 Azure Devops Dotnet Publish task.

中可用

2.Normally 如果我们想发布一个 .net core web 项目并在发布后使​​用 dotnet cli 在本地压缩它,我们可以使用如下命令:

dotnet publish xx.csproj /nologo /p:PublishProfile=xxx /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /maxcpucount:1 /p:platform=xxx /p:configuration=xxx /p:DesktopBuildPackageLocation=SomePath\xxx.zip

dotnet build xxx.sln /nologo /p:PublishProfile=Release /p:PackageLocation="C:\Some\Path\package" /p:OutDir="C:\Some\Path\out" /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /maxcpucount:1 /p:platform="Any CPU" /p:configuration="Release" /p:DesktopBuildPackageLocation="C:\Some\Path\package\package.zip"

中有描述。

以上命令可以在 windows 中生成一个 xx.zip 文件夹。

然而:

您似乎处于linux环境中,请检查this document。如果你想压缩发布文件夹(生成一个包),dotnet build/publish 将调用 msdeploy.exe 来完成这项工作,但由于 MSDeploy 缺乏跨平台支持,以下 MSDeploy 选项仅在 Windows 上受支持。所以在 linux 环境中发布后不支持 dotnet cli 命令生成 zip ... Linux.

目前不支持你想要的

可能的解决方法:

由于我们可以使用dotnet publish将项目发布到一个文件夹(Folder works cross-platform),我们可以在dotnet publish之后调用另一个zip命令来自己压缩。

希望我的回答能帮助解决您的困惑:)