我需要为.net核心2.1创建nuget包,作为Azure Devops中构建和发布过程的一部分我想做什么
1)在构建部分中构建项目,然后将编译后的代码添加到工件中
2)在发布定义中将有2个部署,一个用于Beta版本,其中版本将类似于1.2.3-Beat.2并推送到azure artifact nuget,另一个部署发布版本将类似于1.2.3.2并推送到azure神器nuget。
目前我只有一个构建定义将构建(nuget包在构建过程中创建)并推送到azure artifact nuget。
我想创建的管道
将dotnet pack
任务与--no-build
选项一起使用,并在预发布阶段设置VersionSuffix值。
注意:我当前的团队使用一组Powershell脚本将内部版本号数据附加到.csproj(或netFramework的AssemblyInfo.cs)中找到的Major.Minor数据中,但这不会改变您的问题的答案。一旦你弄清楚Major.Minor.Patch [.Build]数据将是什么,你可以使用dotnet pack
的--no-build
任务中的VersionSuffix属性来传递包裹在管道中移动时的质量。
鉴于.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包任务将生成一个版本为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
。
由于程序包版本包含在执行“nuget pack”的那一刻(通常在构建期间执行),之后更改该版本可能会有点复杂。
您可能感兴趣的是在Azure Artifacts中使用视图的概念,这将允许您在以后的状态下将包提升到发布视图,而无需重新构建包。市场上有一个很好的扩展,允许你在一个版本中执行此操作:https://marketplace.visualstudio.com/items?itemName=rvo.vsts-promotepackage-task
使用此流程,您可以根据需要在预发布视图/ Feed中包含这些包,并在您认为合适时在发布视图中使它们可用。
这方面的缺点是Nuget没有将包装识别为预发布包装,因为你不会用适当的semver包装它们。