【问题标题】:How to create a pre-release nuget package using version number from the assembly如何使用程序集中的版本号创建预发布的 nuget 包
【发布时间】:2020-06-15 15:39:28
【问题描述】:

我正在尝试使用 azure devops 创建 Nuget 包。我想在创建稳定版本之前创建一个包的预发布版本。目前正在尝试打包一个 .netstandard 2.0 应用程序。

我尝试过的-

尝试在 csproj - <Version>1.0.6-alpha</Version> 中设置版本。这实际上有效,但我不确定当我想将它提升到稳定版本时如何删除这个 alpha 标记

我希望包从程序集中获取版本(不使用自动版本控制),例如,如果程序集版本是 1.0.0,我需要一个 1.0.0-alpha 和更高版本的 1.0.0 的包,当它移动到生产 。我可以在网上看到许多使用预设版本号(在变量选项卡中)和附加内部版本号等的解决方案,但我正在寻找一种可以使用来自程序集本身的版本而不是自定义定义的方法。 This 是解释包版本控制的链接

下面是我尝试过的管道

【问题讨论】:

  • @LeoLiu-MSFT 抱歉,我现在只是在尝试。看起来版本控制工作。但我试图找出如何在工件目录中创建 nupkg 文件。它现在是在 bin 中创建的,因此工件发布作业找不到它。
  • 您只需要添加另一个参数--output 来指定工件目录:docs.microsoft.com/en-us/dotnet/core/tools/…
  • @LeoLiu-MSFT 是的,我通过使用 --output $(system.artifactsdirectory) 让它工作了。这是使用正确的目录吗?我通过检查 nuget pack 命令打包文件的位置并将其映射到系统变量来得到这个。
  • 是的,正如我在上面的评论中指出的那样,这是正确的论点。由于我的回答对您有帮助,您可以接受它作为答案,这样它可以帮助遇到相同问题的其他社区成员,我们可以归档这个帖子,谢谢。
  • @LeoLiu-MSFT 请确认我使用的目录 ($(system.artifactsdirectory) ) 是正确的以创建 nuget 包

标签: .net azure-devops continuous-integration nuget devops


【解决方案1】:

NuGet.exe主要用于打包nuspec文件。

在使用现代 csproj 格式时,使用 MSBuild 属性指定版本等内容,如果指定,它将覆盖 csproj 中设置的内容,即使用 .NET CLI 从命令行。

dotnet pack /p:Version=VERSIONNUMBER(或使用pack 目标启动MSBuild)。

在 Azure DevOps Pipeline 任务中,您可以使用 pack 命令在“.NET CLI”任务中输入它并指定其他选项

但推荐使用自动构建版本控制,最好使用内部版本号(内部版本号可以从配置、脚本中设置或使用诸如 GitVersion 之类的任务推断,使用内部版本号将提供可追溯性)

【讨论】:

  • 感谢您的信息。我试图获取已在 csproj 中指定的版本,并在其上附加一个类似“beta”的标签。因此,如果要推送 5.0.0 版本的程序集,它将创建一个像“MyAssembly.5.0.0-beta.nupkg”这样的包
【解决方案2】:

如何使用程序集中的版本号创建预发布的 nuget 包

由于您尝试打​​包.netstandard 2.0 应用程序,我们可以使用dotnet pack,版本是从项目定义中提取的(以前是project.json,现在是*.csproj),而不是程序集AssemblyInfo.cs

project.json to csproj migration 文档中,您可以在项目文件.csproj 中使用VersionPrefixVersionSuffix 属性:

<PropertyGroup>
  <VersionPrefix>1.0.0</VersionPrefix>
  <VersionSuffix>alpha</VersionSuffix>
</PropertyGroup>

根据您的要求:

if the assembly version is 1.0.0 i need a package that is 1.0.0-alpha and later 1.0.0 when its moved to production

为了解决这个问题,我将VersionSuffix的值设置为null,所以,就是:

<PropertyGroup>
  <VersionPrefix>1.0.0</VersionPrefix>
  <VersionSuffix></VersionSuffix>
</PropertyGroup>

然后我们使用 DotNetCoreCLI custom donet 任务而不是 nuget pack 带有参数 --version-suffix "alpha" 的任务:

结果是:

在这种情况下,当程序集版本为1.0.0时,我们可以生成包版本为1.0.0-alpha

另一方面,当 --version-suffix "alpha" 转移到生产环境时,我们可以删除它:

现在,这应该就是你想要的。

希望这会有所帮助。

【讨论】:

  • 我会试试这个。现在我通过一个从 csproj 读取版本的任务来让它工作,但这看起来是一个更好的解决方案。 .Net 框架项目呢?我有一些 .net 框架项目也需要转换
  • @Karthik,对于.net框架只需要使用powershell脚本解析.cs文件即可获取版本。如果您对 .net 框架有任何疑问,可以打开一个关于它的帖子,我会继续跟进。
  • 这个问题怎么样?上面的答案是否解决了您的问题,如果是,您可以接受它作为答案,这样它可以帮助遇到同样问题的其他社区成员,我们可以存档这个帖子,谢谢。如果没有,请告诉我们您是否需要进一步的帮助。
  • 你能看看我的另一个问题stackoverflow.com/questions/61285765/…
  • Ben Vaughan 在 Microsoft 的开发者社区网站上提到了一个现有问题:“无法通过 Visual Studio UI 设置 VersionPrefix 属性(项目属性 -> 包 -> 包版本)。手动将项目文件更新为具有 VersionPrefix 而不是 Version 元素可以正常工作,并且可以在 Project Properties 表单中正确显示,但是通过 UI 对该字段的后续编辑会导致未修改的 VersionPrefix 元素和新创建的 Version 元素然后停止来自应用 VersionSuffix 的“dotnet pack”命令。”
猜你喜欢
  • 2012-05-22
  • 2016-03-05
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 1970-01-01
相关资源
最近更新 更多