如何将azure管道dotnet输入传递到linux dotnet二进制文件

如何将azure管道dotnet输入传递到linux dotnet二进制文件,linux,azure,azure-devops,dotnetcorecli,Linux,Azure,Azure Devops,Dotnetcorecli,我正在尝试使用CLI dotnet命令复制以下Azure管道: - task: DotNetCoreCLI@2 inputs: command: publish publishWebProjects: True arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)' zipAfterPublish: True 到目前为止,我可以进行项目构建,但是从中获取z

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

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True
到目前为止,我可以进行项目构建,但是从中获取zip文件似乎有问题-传递输入zipAfterPublish等似乎不可能传递,尽管有一些分散的文档表明这些可以通过-p:optiona=x传递;选项b=y或/p:optiona=x;选项B=y。我找不到关于这方面的明确文件

这就是我所拥有的—构建部分工作正常,$PWD/out目录中填充了许多文件,但没有压缩任何内容:

dotnet publish --configuration Release --output $PWD/out /p:"zipAfterPublish=true;publishWebProjects=true"
我猜这是关于如何将输入正确地传递给命令

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

- task: DotNetCoreCLI@2
  inputs:
    command: publish
    publishWebProjects: True
    arguments: '--configuration Release --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True
1.zipAfterPublish是仅在Dotnet发布任务中可用的一个选项。如果检查dotnet发布任务的日志,您会发现它不会将任何类似zipAfterPublish的属性传递给命令:

因为只有msbuild属性可以通过这种方式传递:/p:xxx=xxx。zipAfterPublish无法在命令行中工作,因为它不是msbuild属性,dotnet cli不支持该选项,仅在Azure Devops dotnet Publish任务中可用

2.通常,如果我们想发布一个.net核心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

如中所述

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

然而:

您似乎在linux环境中,请检查。如果要压缩发布文件夹以生成包,dotnet生成/发布将调用msdeploy.exe来执行此任务,但由于msdeploy缺乏跨平台支持,因此仅在Windows上支持以下msdeploy选项。因此,不支持在linux环境中发布后使用dotnet cli命令生成zip。。。Linux目前不支持您想要的内容

可能的解决办法:

因为我们可以使用dotnetpublish将项目发布到一个文件夹中,所以我们可以在dotnetpublish之后调用另一个zip命令来对其进行压缩


希望我的回答有助于解决您的难题:

我知道这一点-这并不能解决操作系统是Linux的问题,抱歉,如果不清楚,各位。嗨,杰珀,这个问题有什么更新吗?据我所知,当操作系统在Linux中时,dotnet命令不能直接生成发布包。也许你需要考虑其他的方向…好答案,现在我明白了。我最终找到了如何注入在Linux上运行的Azure build代理所需的PATH环境变量,方法是将runsvc.sh添加到服务启动时systemd运行的runsvc.sh中,以便它可以看到完成构建所需的二进制文件。避免使用Linux原生dotnet二进制文件,允许我按原样使用原始问题中的管道。仍然在Linux上。