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

时间:2020-03-23 12:48:15

标签: linux azure azure-devops dotnetcorecli

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

public static Output GetEnumItem<Output, Input>(Input input)
    {
        //Output type checking...
        if (typeof(Output).BaseType != typeof(Enum))
            throw new Exception("Exception message...");

        //Input type checking: string type
        if (typeof(Input) == typeof(string))
            return (Output)Enum.Parse(typeof(Output), (dynamic)input);

        //Input type checking: Integer type
        if (typeof(Input) == typeof(Int16) ||
            typeof(Input) == typeof(Int32) ||
            typeof(Input) == typeof(Int64))

            return (Output)(dynamic)input;

        throw new Exception("Exception message...");
    }

到目前为止,我可以进行项目构建,但是要获取一个zip文件似乎是有问题的-传递zipAfterPublish等输入似乎无法传递,尽管有一些分散的文档表明可以使用-p传递这些文件: “ optiona = x; optionb = y”或/ p:“ optiona = x; optionb = y”。我找不到确切的文档。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here

由于只能以这种方式传递msbuild属性:/p:xxx=xxxzipAfterPublish无法在命令行中使用,因为它不是msbuild属性,dotnet cli不支持该选项,仅在Azure Devops Dotnet Publish task中可用。

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

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"

this issue中对此进行了描述。

以上命令可以在Windows中运行以生成xx.zip文件夹。

但是:

您似乎处于Linux环境中,请检查this document。如果要压缩publish文件夹(生成程序包),dotnet build/publish将调用msdeploy.exe来完成此工作,但是由于 MSDeploy缺乏跨平台支持,因此支持以下MSDeploy选项仅在Windows 上。因此,在Linux环境中发布后,不支持dotnet cli命令来生成zip ... Linux中目前不支持您想要的内容。

可能的解决方法:

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

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