【问题标题】:DotNetCoreCLI@2 pack task ignores version suffix directiveDotNetCoreCLI@2 打包任务忽略版本后缀指令
【发布时间】:2019-08-13 09:55:55
【问题描述】:

我正在为 .Net Core 2.1 解决方案创建我的第一个 Azure 构建管道。我的所有步骤都使用DotNetCoreCLI@2 取得了成功,也就是说,除了打包步骤。

这行得通,目前是我所采用的方法:

- script: |
    dotnet pack src/MyProject/MyProject.csproj --version-suffix $(VersionSuffix) --configuration $(BuildConfiguration) --no-restore --no-build --output $(Build.ArtifactStagingDirectory)
  displayName: 'dotnet pack [$(BuildConfiguration)]'

这不起作用,因为它忽略了--version-suffix 指令:

- task: DotNetCoreCLI@2   
  inputs:
    command: 'pack'
    # packagesToPack: '**/*.csproj; **/!*Test*.csproj' - TODO pack all projects, except test projects
    packagesToPack: 'src/MyProject/MyProject.csproj'
    arguments: '--version-suffix $(VersionSuffix) --configuration $(BuildConfiguration) --no-restore --no-build --output $(Build.ArtifactStagingDirectory)'
  displayName: 'dotnet pack [$(BuildConfiguration)]'

(我在其中留下了一个 TODO 作为支线任务)

此外,版本前缀位于 csproj 文件中:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>

    <PackageId>MyProject</PackageId>
    <Authors>Me</Authors>
    <Description>A description</Description>
    <VersionPrefix>0.1.0</VersionPrefix>
    <IsPackable>true</IsPackable>
  </PropertyGroup>
<Project/>

当我使用dotnet pack 时,我看到了一个完整版本的 NuGet 包(即&lt;prefix&gt;-&lt;suffix&gt;),正如我所期望的那样;例如0.1.0-190813.02.abcdef.

当我使用DotNetCoreCLI@2 任务时,版本仅限于版本前缀;例如0.1.0.

我错过了什么?理想情况下,我希望管道 yaml 文件保持一致。

【问题讨论】:

    标签: build azure-devops


    【解决方案1】:

    我错过了什么?理想情况下,我希望管道 yaml 文件保持一致。

    不,你没有错过任何东西。此行为是为DotNetCoreCLI@2 设计的。

    当您在没有 YAML 的经典编辑器中检查该任务时,您会看到没有这样的 Arguments 选项,而不是 Pack options

    所以,我们可以使用这个选项来定义包版本。

    另外,根据文档.NET Core CLI task,在YAML中使用参数的描述:

    Pack 的参数-version 不接受,我们需要使用自定义命令,也就是您现在使用的方法。

    所以,你现在是在正确的道路上,不用担心。

    希望这会有所帮助。

    【讨论】:

    • 这有点微妙。诚然,我没有注意到细则。谢谢,我将保留我的解决方案。谢谢。
    • 为什么pack 是奇数?
    • @JevonKendon,对不起,我不知道原因。这应该是底层方法的实现限制。也许我们需要询问这个任务的开发者。您可以尝试从这里获取原因:github.com/microsoft/azure-pipelines-tasks/issues
    【解决方案2】:

    我也偶然发现了这个问题,发现 DotNetCoreCLI 不会帮助我处理每个@Leo 答案的版本后缀。

    解决这个问题的方法是使用powershell 任务打包您的项目。一个简单的例子:

          - powershell: 'dotnet pack -o $(build.artifactstagingdirectory) --no-build --no-restore -c ${{ parameters.configuration }} ${{ parameters.projectPath }}'
        ```
    

    【讨论】:

    • 这是正确答案。 DotNetCoreCLI 只是拒绝承认任何 VersionSuffix 的存在,即使使用自定义命令。
    【解决方案3】:

    我修复的方法是使用 Nuget 命令

    - task: NuGetCommand@2
      displayName: 'Pack Test'
      inputs:
        command: 'pack'
        packagesToPack: '**/test.nuspec'
        versioningScheme: 'byBuildNumber'
    

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多