我尝试使用.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;不是有效的版本字符串。
我想我已经结束了;我错了什么?
答案 0 :(得分:19)
根据the documentation,Version
属性会覆盖打包时的版本,而是使用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 分支,那么我们什么都不添加。