如何在csproj中使用dotnet-pack --version-suffix?

时间:2017-03-05 19:27:18

标签: .net msbuild .net-core

我尝试使用.net Core工具RC4 dotnet pack命令创建带后缀的nuget包。

我可以创建" MyProject.1.2.3.nupkg"成功,但我想要" MyProject.1.2.3-beta.nupkg"。

根据文档here --version-suffix"使用指定字符串更新 - *包版本后缀中的星号。"

我设法找到了dotnet pack从哪里得到它的版本 - dotnet pack使用csproj文件中covers which uses the <version/> element下的msbuild。例如,<version>1.2.3</version>创建一个名为&#34; MyProject.1.2.3.nupkg&#34;的文件。

如果我将csproj中的<version/>设置为1.2.3并指定--version-suffix beta,那么它不会附加-beta,但它会构建。

如果我将版本设置为<version>1.2.3-*</version>,那么dotnet还原会说明&#39; 1.2.3 - *&#39;不是有效的版本字符串。

我想我已经结束了;我错了什么?

3 个答案:

答案 0 :(得分:19)

根据the documentationVersion属性会覆盖打包时的版本,而是使用VersionPrefix

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

使用命令打包解决方案:

dotnet pack --version-suffix beta

您可以选择在VersionPrefix文件中设置VersionSuffix.csproj

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

答案 1 :(得分:2)

--version-suffix参数仅设置$(VersionSuffix) msbuild参数。从dotnet pack documentation

  

在.csproj文件中将项目的版本后缀配置为$(VersionSuffix)的情况下,打包当前项目并使用给定的后缀更新生成的软件包版本:

dotnet pack --version-suffix "ci-1234"

现在,我认为 --version-suffix仅与csproj中的<VersionPrefix>值一起使用,并且也无法提供设置版本前缀的机制。

您可以使用dotnet语法通过/p:Parameter=Value调用覆盖 any msbuild参数。如果要从git bash之类的shell终端调用此命令,则需要输入//p:Parameter=Value

现在,实际上我发现,避免整个前缀/后缀的恶作剧要容易得多,因为它对我而言一直都很脆弱。相反,我只是简单地使用csproj中定义的<Version>属性,如下所示:

<Version>$(Version)</Version>
  

编辑:我不确定此行为是否已更改,或者dotnet是否始终支持此操作,但是似乎{s {1}}操作期间不需要上述csproj更改来正确设置版本。这实际上很有意义,因为csproj文件中的xml标记仅设置了msbuild属性,而dotnet pack语法也设置了这些属性。

然后对于自动构建,您可以根据需要解析前缀/后缀,然后将其与/p:Property=Value结合使用以生成完整的版本字符串。另一个未记录的要求是版本后缀必须以一个符合semver的字符开头。常见的后缀类似于-

ci-<unix-timestamp>

答案 2 :(得分:1)

聚会有点晚,但根据 dotnet pack documentation examples,您可以使用此 MSBuild 属性:

dotnet pack -p:PackageVersion=2.1.0

而且我已经确认您也可以将它用于预发布版本(例如,2.1.0-preview)。

这允许人们在 .csproj 文件中设置 <Version> 元素(并使用他们想要的 IDE),然后在构建过程中覆盖它。在我的公司,我们有一个 Powershell 脚本,它调用 dotnet pack 并根据构建代码的分支设置版本号。如果它来自 dev 分支,那么我们添加 -alpha,但如果它来自 master 分支,那么我们什么都不添加。