我正在为.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软件包(即<prefix>-<suffix>
);例如0.1.0-190813.02.abcdef
。
当我使用DotNetCoreCLI@2
任务时,版本被限制为版本前缀。例如0.1.0
。
我错过了什么?理想情况下,我希望管道yaml文件保持一致。
答案 0 :(得分:1)
我错过了什么?理想情况下,我希望管道yaml文件保持一致。
不,您什么都没错过。此行为是专为DotNetCoreCLI@2
设计的。
在没有YAML的经典编辑器中检查该任务时,您会看到没有这样的 Arguments 选项,而不是 Pack options :
因此,我们可以使用此选项来定义软件包版本。
此外,根据文档.NET Core CLI task,介绍了在YAML中使用参数时的参数说明:
-version
的参数Pack
不被接受,我们需要使用custom命令,这是您现在使用的方法。
因此,您现在处在正确的方向上,无需担心。
希望这会有所帮助。
答案 1 :(得分:0)
我也偶然发现了这个问题,并发现 DotNetCoreCLI 不会帮助我解决每个 @Leo 答案的版本后缀。
解决这个问题的方法是用 powershell
任务打包你的项目。一个简单的例子:
- powershell: 'dotnet pack -o $(build.artifactstagingdirectory) --no-build --no-restore -c ${{ parameters.configuration }} ${{ parameters.projectPath }}'
```