在 Azure Devops 中构建管道时,管理从 beta 到 VS2017 中针对 .net core2.1 发布的 nuget 版本
Managing nuget versions from beta to release in VS2017 for .net core2.1 when building pipeline in Azure Devops
我需要为 .net core 2.1 创建 nuget 包作为 Azure Devops 中构建和发布过程的一部分
我想做什么
1) 在构建部分构建项目,然后将编译后的代码添加到artifact
2) 在 Release 定义中将有 2 个部署,一个用于 Beta 版本,其中版本类似于 1.2.3-Beat.2 并推送到 azure artifact nuget,另一个部署用于版本类似于 1.2 的版本。 3.2 并推送到 azure 神器 nuget。
目前我只有一个构建定义,它将构建(在构建过程中创建 nuget 包)并推送到 azure 工件 nuget。
我要创建的管道
由于包版本在您执行 'nuget pack' 时包含,您通常会在构建期间执行此操作,因此之后更改该版本可能会变得有点复杂。
在您的案例中,有趣的是在 Azure Artifacts 中使用视图的概念,这将允许您在以后的状态下将包升级到发布视图,而无需重建包。
市场上有一个很好的扩展,允许您在一个版本中执行此操作:https://marketplace.visualstudio.com/items?itemName=rvo.vsts-promotepackage-task
使用此流程,您可以根据需要在预发布版 view/feed 中使用这些包,并在您认为合适的时候在发布视图中提供它们。
这样做的缺点是 Nuget 不会将这些包识别为预发布包,因为您不会将它们与适当的 semver 打包在一起
使用带有 --no-build
选项的 dotnet pack
任务,并在预发布阶段设置 VersionSuffix 值。
注意:我目前的团队使用一组 Powershell 脚本将内部版本号数据附加到在 .csproj 中找到的 Major.Minor 数据(或 AssemblyInfo.cs 用于 netFramework),但事实并非如此改变你的问题的答案。一旦弄清楚 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
.
我需要为 .net core 2.1 创建 nuget 包作为 Azure Devops 中构建和发布过程的一部分 我想做什么
1) 在构建部分构建项目,然后将编译后的代码添加到artifact
2) 在 Release 定义中将有 2 个部署,一个用于 Beta 版本,其中版本类似于 1.2.3-Beat.2 并推送到 azure artifact nuget,另一个部署用于版本类似于 1.2 的版本。 3.2 并推送到 azure 神器 nuget。
目前我只有一个构建定义,它将构建(在构建过程中创建 nuget 包)并推送到 azure 工件 nuget。
我要创建的管道
由于包版本在您执行 'nuget pack' 时包含,您通常会在构建期间执行此操作,因此之后更改该版本可能会变得有点复杂。
在您的案例中,有趣的是在 Azure Artifacts 中使用视图的概念,这将允许您在以后的状态下将包升级到发布视图,而无需重建包。 市场上有一个很好的扩展,允许您在一个版本中执行此操作:https://marketplace.visualstudio.com/items?itemName=rvo.vsts-promotepackage-task
使用此流程,您可以根据需要在预发布版 view/feed 中使用这些包,并在您认为合适的时候在发布视图中提供它们。
这样做的缺点是 Nuget 不会将这些包识别为预发布包,因为您不会将它们与适当的 semver 打包在一起
使用带有 --no-build
选项的 dotnet pack
任务,并在预发布阶段设置 VersionSuffix 值。
注意:我目前的团队使用一组 Powershell 脚本将内部版本号数据附加到在 .csproj 中找到的 Major.Minor 数据(或 AssemblyInfo.cs 用于 netFramework),但事实并非如此改变你的问题的答案。一旦弄清楚 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
.