使用MSBuild和TFS

Sag*_*tay 2 msbuild tfs

我正在尝试使用MSBuild和TFS.

我已经设法创建了自己的MSBuild脚本,它在命令行中运行良好.该脚本适用于csproj文件,并编译,混淆,签名和复制所需的所有内容.

但是,查看TFS和Team Build的文档,它似乎希望解决方案成为脚本的"输入".

此外,我还没有找到一种简单/直观的方法来从TFS执行"获取最新版本"作为脚本的一部分.我假设Team Build会自动对它想要编译的解决方案做一个"获取最新",但是再次 - 我不(想要)使用解决方案......

任何见解?任何指针?任何链接?

Ric*_*erg 6

Team Build定义了自己的大约25个目标.对队列构建进行排队时,它们将按照@MSDN列出的预定义顺序自动为您运行.不要修改此过程.相反,只需设置几个属性即可确定任务的行为方式.例如,<IncrementalGet如果您想要普通的Get行为,请将> 设置为"true",如果您想要更接近tf get/force,则设置为"false" .

至于运行您自己的MSBuild脚本,再次这不是必需的.从为您提供的TFSBuild.proj文件开始.它只需要很少的修改就可以完成你描述的所有事情.通过覆盖AfterCompile或AfterTest之类的任务来调用您的模糊处理和签名代码.将您的自动部署代码放在AfterDropBuild中.等等.

如果你适当地重构,即使是非常复杂的场景也是可能的.查看过去的答案#1 #2.

就实际编译而言,Team Build对解决方案进行操作是正确的.我建议给它想要的东西.我将是第一个承认*.sln文件很丑陋而且基本上没有文档的人,但至少你将工作卸载到经过良好测试和支持的产品上.

如果您真的想要,可以给它一个空白/虚拟解决方案,并使用您的自定义编译器逻辑覆盖CoreCompile任务.但这确实是在寻找麻烦.至少,你失去了Team Build的所有灵活性,WRT构建了多个平台和风格.更实际的是,你必须花费大量时间来调试那些旨在"正常工作"的东西 - 而且还没有好的MSBuild调试器(我知道).不值得,IMO.

顺便说一句,解决方案文件不会影响Get过程.正如你在第一个链接中看到的那样,Get Team很早就完成了,早在Team Build甚至读取解决方案文件之前.除了像<IncrementalGet>之类的一些选项之外,这根本不受MSBuild控制 - 特别是,要下载的路径由与构建定义关联的工作空间映射确定.即,它们存储在Team Build SQL数据库中,而不是文件系统中,并使用调用TFS Web服务API的工具(如团队资源管理器)进行管理.