0

我正在尝试使用 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)到命令。

4

1 回答 1

2

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

1.这是在任务中zipAfterPublish可用的一个选项。如果您检查 dotnet publish 任务的日志,您会发现它没有将任何属性传递给命令:Dotnet PublishzipAfterPublish

在此处输入图像描述

由于只能通过这种方式传递 msbuild 属性:/p:xxx=xxx. 不会在命令行中工作,zipAfterPublish因为它不是 msbuild 属性,该选项在 中不受支持dotnet cli,仅在Azure Devops Dotnet Publish task.

2.通常如果我们想发布一个.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环境下,请查看这个文档。如果你想压缩发布文件夹(生成一个包),dotnet build/publish将调用msdeploy.exe来完成这项工作,但由于MSDeploy 缺乏跨平台支持,以下 MSDeploy 选项仅在 Windows 上受支持。所以不支持 dotnet cli 命令在 linux 环境中发布后生成 zip ......你想要的现在在 Linux 中不支持。

可能的解决方法:

由于我们可以使用dotnet publish将项目发布到一个文件夹(文件夹跨平台工作),我们可以在之后调用另一个 zip 命令dotnet publish来自己压缩它。

希望我的回答能解决你的疑惑:)

于 2020-03-24T03:39:40.943 回答