我需要将程序集版本号添加到TeamCity构建的工件的名称中。
我的计划是在构建后重命名工件但是如何在buildstep中访问程序集版本?
是否已有标准TC参数?如果没有,那么我如何将信息从我的MSBuild发送到TC?
答案 0 :(得分:0)
我最近刚刚自己做了这件事,这就是我设法做到的。
如果您正在构建项目(* .csproj),那么您可以编辑csproj(在记事本中)。 在“AfterBuild”目标
中添加以下内容注意:请确保它不在评论输出栏中,默认为
<Target Name="AfterBuild">
<GetAssemblyIdentity AssemblyFiles="bin\MyAssembly.dll">
<Output TaskParameter="Assemblies" ItemName="MyAssembly"/>
</GetAssemblyIdentity>
<Message Text="Setting build number back to TeamCity... " Importance="high"/>
<TeamCitySetBuildNumber BuildNumber="$(MyAssembly.Version)" />
</Target>
如果您正在构建解决方案,那么创建一个从TeamCity构建的MSBUILD .proj文件,该文件首先调用构建解决方案,然后将版本设置为TeamCity中的BuildNumber。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="SetBuildNumber" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<Message Text="Build task called... " Importance="high"/>
<MSBuild Projects="$(teamcity_build_checkoutDir)\MySolution.sln" ToolsVersion="12.0" Properties="Configuration=Release;OutputPath=bin;"/>
</Target>
<Target Name="SetBuildNumber" DependsOnTargets="Build">
<GetAssemblyIdentity AssemblyFiles="bin\MyAssembly.dll">
<Output TaskParameter="Assemblies" ItemName="MyAssembly"/>
</GetAssemblyIdentity>
<Message Text="Setting build number back to TeamCity... " Importance="high"/>
<TeamCitySetBuildNumber BuildNumber="$(MyAssembly.Version)" />
</Target>
</Project>
使用上面的示例,将其放在MySolution.proj等文件中。告诉TeamCity使用MSBuild Runner和Build MySolution.proj并保留目标空白(将使用proj文件中设置的默认值),这将运行SetBuildNumber目标,而目标依赖于Build,因此将调用Build第一。这将使用指定的参数构建在“Build”目标中指定的解决方案,然后这将运行“SetBuildNumber”,它将获取指定dll的AssemblyVersion,并将消息发送回TeamCity以更新BuildNumber(%build。数字%)变量。
希望这有帮助。