我有一些嵌入式C软件存储在TFS下,并且有一个相应的TFS构建定义,成功检出代码并使用相关编译器进行构建。因此,需要明确的是,虽然这是TFS,但我不是在构建.NET应用程序。
现在,我正在尝试提供与构建过程相关联的整体软件版本支持。我的当前目标如下:
被构建的源代码具有一个头文件,其中包含三个变量的#define,即Major Version,Minor Version和Build Number。然后,在编译时使用此头文件将版本号烘焙到软件中。概念是开发人员负责仅作为开发的一部分更新主要和次要版本号。构建编号始终保留在源中,并且不应由开发人员修改。
如果开发人员在自己的机器上本地生成构建,则主要和次要版本将设置为代码中定义的值,但构建编号将保持为0,这表明是非受控制的构建。但是,对于服务器上的正式构建,我希望TFS自动递增构建号,以便指定了相同的主要和次要版本的后续构建结果递增构建号,从而提供整体唯一版本描述符。
阅读了一些文献后,我特别看到这样的工作方式:将TFS构建号格式定义为以下内容:$MajorVersion.$MinorVersion.$(Rev:.rr),其中MajorVersion和MinorVersion是我在构建过程中定义的变量。
我意识到,修订版基于整个构建号格式维护唯一性。因此,我认为从源代码中提取主要和次要版本并在尝试评估修订版和更广泛的构建编号之前填充两个构建变量非常重要。我创建了一个PowerShell脚本,使用正则表达式从头文件中提取主要和次要版本,然后从脚本内设置变量。
现在最终的问题。看起来我的方法有缺陷。只要我排队构建,TFS构建号就会立即计算,似乎为排队的构建命名。在这个阶段,我无法运行我的脚本来提取主要和次要版本,因此也得到了错误的修订号。因此,基于我上面提到的构建号格式,我最终得到类似“..01”或“0.0.01”的构建号和结果名称,具体取决于是否初始化构建定义中的主要和次要变量。
有没有办法推迟TFS构建号的评估,直到我通过PowerShell构建步骤从源代码中读取了主版本和次要版本?如果可以这样做,修订版应该基于实际的主版本和次要版本计算。然后,我将使用另一个脚本仅将我的头文件中的Build number #define设置为与TFS构建号中的修订号匹配。另外,由于TFS将构建号用作排队构建的名称,我不确定在排队构建时如何处理这个问题,因为我不知道最终的TFS构建号。在构建过程中可以修改名称吗?
请帮忙。我认为我的想法相当简单,但我很难在否则非常好的TFS 2015构建系统中实现它。
现在,我正在尝试提供与构建过程相关联的整体软件版本支持。我的当前目标如下:
被构建的源代码具有一个头文件,其中包含三个变量的#define,即Major Version,Minor Version和Build Number。然后,在编译时使用此头文件将版本号烘焙到软件中。概念是开发人员负责仅作为开发的一部分更新主要和次要版本号。构建编号始终保留在源中,并且不应由开发人员修改。
如果开发人员在自己的机器上本地生成构建,则主要和次要版本将设置为代码中定义的值,但构建编号将保持为0,这表明是非受控制的构建。但是,对于服务器上的正式构建,我希望TFS自动递增构建号,以便指定了相同的主要和次要版本的后续构建结果递增构建号,从而提供整体唯一版本描述符。
阅读了一些文献后,我特别看到这样的工作方式:将TFS构建号格式定义为以下内容:$MajorVersion.$MinorVersion.$(Rev:.rr),其中MajorVersion和MinorVersion是我在构建过程中定义的变量。
我意识到,修订版基于整个构建号格式维护唯一性。因此,我认为从源代码中提取主要和次要版本并在尝试评估修订版和更广泛的构建编号之前填充两个构建变量非常重要。我创建了一个PowerShell脚本,使用正则表达式从头文件中提取主要和次要版本,然后从脚本内设置变量。
现在最终的问题。看起来我的方法有缺陷。只要我排队构建,TFS构建号就会立即计算,似乎为排队的构建命名。在这个阶段,我无法运行我的脚本来提取主要和次要版本,因此也得到了错误的修订号。因此,基于我上面提到的构建号格式,我最终得到类似“..01”或“0.0.01”的构建号和结果名称,具体取决于是否初始化构建定义中的主要和次要变量。
有没有办法推迟TFS构建号的评估,直到我通过PowerShell构建步骤从源代码中读取了主版本和次要版本?如果可以这样做,修订版应该基于实际的主版本和次要版本计算。然后,我将使用另一个脚本仅将我的头文件中的Build number #define设置为与TFS构建号中的修订号匹配。另外,由于TFS将构建号用作排队构建的名称,我不确定在排队构建时如何处理这个问题,因为我不知道最终的TFS构建号。在构建过程中可以修改名称吗?
请帮忙。我认为我的想法相当简单,但我很难在否则非常好的TFS 2015构建系统中实现它。