如何将nuspec的版本号提取到TeamCity?

如何将nuspec的版本号提取到TeamCity?,teamcity,nuget,teamcity-8.0,Teamcity,Nuget,Teamcity 8.0,如何将nuspec的版本号提取到TeamCity 我们有一个csproj文件,其中包含相应的nuspec节点: 1.3.2 在TeamCity中,我想构建这个项目,并创建一个版本为1.3.2的NuGet包。%build.counter%。例如,1.3.2.322。重要的是版本号来自源代码管理(NuSpec)中的一个文件,我不想在TeamCity中将其作为变量复制。有没有办法从NuSpec文件中提取1.3.2并将其用作TeamCity变量?我想到了spring的几种方法,它们都使用: 使用Powe

如何将nuspec的版本号提取到TeamCity

我们有一个csproj文件,其中包含相应的nuspec节点:

1.3.2


在TeamCity中,我想构建这个项目,并创建一个版本为1.3.2的NuGet包。%build.counter%。例如,1.3.2.322。重要的是版本号来自源代码管理(NuSpec)中的一个文件,我不想在TeamCity中将其作为变量复制。有没有办法从NuSpec文件中提取1.3.2并将其用作TeamCity变量?

我想到了spring的几种方法,它们都使用:

使用PowerShell构建步骤,类似以下内容(抱歉,我的PS不太好):

或者,类似地,引导一个工具,如:


此步骤需要在需要生成编号的任何其他步骤之前添加。

此方法适用于TeamCity的10+版本,解决了
选择Xml
和名称空间的问题

$Version = ([xml](Get-Content .\MyProject.nuspec)).package.metadata.version
$BuildCounter = %build.counter%

echo "##teamcity[setParameter name='PackageVersion' value='$Version.$BuildCounter']"

还值得注意的是,生成的版本号将无法在AssemblyInfo生成功能中使用,因为这将在服务器获取要生成的更改时运行。这曾经让我绊倒过;唯一的解决方法是通过评估版本号的快照依赖项链接上游版本。我还在AppVeyor中使用这种样式,将%build.counter%替换为$env:AppVeyor\u build\u number,并使用--version$version.$BuildCounter调用choco包。谢谢你的精彩和简洁的语法。
$buildcounter = "1231"
$version = xml sel -T -t -v "/package/metadata/version" Package.nuspec
Write-Output "##teamcity[buildNumber '$version.$buildcounter']"
$Version = ([xml](Get-Content .\MyProject.nuspec)).package.metadata.version
$BuildCounter = %build.counter%

echo "##teamcity[setParameter name='PackageVersion' value='$Version.$BuildCounter']"