我的Team Foundation Server Build运行得很干净。它生成几个程序集,我希望程序集版本的最后一个数字是 changset 数字。也就是说,如果我提交changeset11667,例如程序集版本号应为“x.y.z.11667”。我检查了可用的宏,但没有一个是变更集号。
我仍然希望能够在我的开发机器上正常构建解决方案文件,只需使用签入的版本号。
我将如何实现这一目标?
答案 0 :(得分:6)
一旦超过65,535个变更集,就会意识到这将停止工作。也许你想更新其他一些领域。顺便说一句,是的,构建工程是工程。指出解决方案并告诉它构建只是旅程的开始。
答案 1 :(得分:3)
查看Community TFS Build Extension project on CodePlex。它包含一个AssemblyInfo activity和TfsVersion activity,它们能够在构建过程中使用自定义格式更改程序集信息。
要在dev机器上构建它,你必须使用批处理文件和TFS命令行实用程序自己实现这些构建扩展。
答案 2 :(得分:3)
我正在开发一个工具来自动化它仍处于开发阶段的构建过程,这里的开源是链接(我计划在大约一周内发布):
https://github.com/jupaol/NCastor
现在我建议您检查语义版本控制:
要从TFS获取最新的变更集,您有以下几种选择:
我构建了一个自定义例程来执行此操作
我必须构建该例程,因为社区任务和MSBuild Extenssions任务不能在64位计算机上运行,如果您使用32位计算机进行构建,那么您可以使用以下任务:
使用http://msbuildextensionpack.codeplex.com/
<UsingTask AssemblyFile="$(ExtensionTasksPath)MSBuild.ExtensionPack.dll" TaskName="MSBuild.ExtensionPack.VisualStudio.TfsVersion"/>
使用http://msbuildtasks.tigris.org/
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Tfs.TfsVersion" />
设置不同版本的示例:
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.AssemblyInfo" />
<MSBuild.Community.tasks.AssemblyInfo OutputFile="$(AssemblyVersionFilePath)"
CodeLanguage="C#"
AssemblyFileVersion="$(FileVersion)"
AssemblyInformationalVersion="$(InformationalVersion)"
AssemblyVersion="$(SemanticVersion)" />
创建文件后,只需将该文件添加为每个项目的链接即可!您的所有项目都在共享通用程序集信息。
答案 3 :(得分:2)
最后,我的一位同事编写了以下MSBuild任务来解决问题。
public class GetNextBuildNumber : Task
{
[Required]
public string TfsCommand { get; set; }
[Required]
public string TfsArgument { get; set; }
[Output]
public int BuildNumber { get; set; }
public override bool Execute()
{
BuildNumber = GetLatestVersionNumber();
return true;
}
private int GetLatestVersionNumber()
{
var process = new RunProcess();
var result = process.ExecuteCommand(TfsCommand, TfsArgument);
return ParseResult(result);
}
private int ParseResult(string result)
{
const string changeset = "Changeset:";
const string user = "User:";
if (string.IsNullOrEmpty(result) || !result.Contains(changeset))
{
// Invalid result
Log.LogWarning("Could not get latest build number. Reason: " + result);
return 0;
}
var indexOfChangeset = result.IndexOf(changeset, StringComparison.InvariantCulture) + changeset.Length;
var indexOfUser = result.IndexOf(user, StringComparison.InvariantCulture);
var revision = result.Substring(indexOfChangeset, indexOfUser - indexOfChangeset).Trim();
return Convert.ToInt32(revision);
}
}
答案 4 :(得分:0)
你想做什么目的? 如果要在DLL和源代码之间建立从TFS拉出的关系,最好的方法是在PDB生成中使用TFS源控制索引符号。 这样,当您调试任何版本的软件时,Visual Studio将在需要时从TFS获取正确的源代码版本。