我需要为 .net core 2.1 创建 nuget 包作为 Azure Devops 构建和发布过程的一部分 我想做什么
1) 在构建部分构建项目,然后将编译后的代码添加到工件中
2) 在 Release 定义中将有 2 个部署,一个用于 Beta 版本,其中版本类似于 1.2.3-Beat.2 并推送到 azure artifact nuget,另一个部署用于发布,其中版本类似于 1.2.3.2 和推送到 azure 神器 nuget。
目前我只有一个构建定义,它将构建(在构建过程中创建 nuget 包)并推送到 azure 工件 nuget。
我想创建的管道
最佳答案
使用 dotnet pack
任务 --no-build
选项,并在预发布阶段设置 VersionSuffix 值。
注意:我目前的团队使用一组 Powershell 脚本将内部版本号数据附加到 .csproj(或 AssemblyInfo.cs 的 netFramework)中找到的 Major.Minor 数据,但这不会改变您问题的答案.一旦弄清楚 Major.Minor.Patch[.Build] 数据将是什么,就可以在 dotnet pack
中使用 VersionSuffix 属性。任务 --no-build
在包裹通过您的管道时传达包裹的质量。
给定一个 .csproj
看起来像这样的文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup>
<PackageVersion>1.0.0.1</PackageVersion>
<AssemblyVersion>1.0.1812.201</AssemblyVersion>
<FileVersion>1.0.1812.201</FileVersion>
</PropertyGroup>
<ItemGroup>
<Content Include="Assemblies\*">
<Pack>true</Pack>
<PackagePath>lib\$(TargetFramework)</PackagePath>
</Content>
</ItemGroup>
</Project>
同样,如果我们忽略我们使用的版本控制步骤,上面管道图像中的 dotnet pack 任务将生成版本为 1.0.0.1-Beta
的包。 .
然后在稳定发布阶段,不要设置后缀值,让包像往常一样从 .csproj 文件中获取其版本(例如 1.0.0.1
)。
样本中的元素和值.csproj
上面的文件可以直接编辑为 .csproj
或者它们可以使用 Properties >> Package 选项卡进行设置。
如果值未在属性菜单中更改或明确添加,则元素和值不会出现在 .csproj
中并由 dotnet build|test|pack 命令假定。
如果您不熟悉这些属性和值的组合方式,那么找到这些属性和值的正确组合可能会让人望而生畏。我找到了 this article在尝试破译版本属性时很有用。
还有,你应该明白1.0.1-b2
< 1.0.1
,因此您的预发布版本可能是 1.2.3.2-beta1
你的稳定版本是 1.2.3.2
.
关于azure-devops - 在 Azure Devops 中构建管道时,管理从 beta 到 VS2017 中针对 .net core2.1 发布的 nuget 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54803348/