我正在尝试使用MSBuild和TFS。
我已经设法创建了自己的MSBuild脚本,该命令在命令行中运行良好。该脚本适用于csproj文件,并编译,混淆,签名和复制所需的所有内容。
然而,查看TFS&amp ;;的文档。 Team Build,它似乎希望解决方案成为脚本的“输入”。
此外,作为脚本的一部分,我还没有找到一种从TFS执行“获取最新版本”的简单/直观方式。我假设Team Build会自动对它想要编译的解决方案进行“获取最新”,但是再次 - 我不(想要)使用解决方案......
任何见解?任何指针?任何链接?
答案 0 :(得分:6)
Team Build定义了25 targets of its own。对队列构建进行排队时,它们将按照@MSDN列出的预定义顺序自动为您运行。不要修改此过程。相反,只需设置couple of these properties即可确定任务的行为方式。例如,设置<IncrementalGet
&gt;如果你想要普通的Get行为,则为“true”;如果你想要更接近 tf get / force 的东西,则为“false”。
就运行您自己的MSBuild脚本而言,这不应该是必要的。从为您提供的TFSBuild.proj文件开始。它只需要很少的修改就可以完成你描述的所有事情。打电话给你的混淆&amp;通过覆盖AfterCompile或AfterTest之类的任务来签署代码。将您的自动部署代码放在AfterDropBuild中。等
如果你适当地重构,即使是非常复杂的场景也是可能的。查看过去的答案#1 #2。
就实际编译而言,Team Build对解决方案的运作是正确的。我建议给它想要的东西。我将是第一个承认* .sln文件很丑陋并且基本上没有文档的人,但至少你将工作卸载到经过充分测试的文件中。支持的产品。
如果您真的想要,可以给它一个空白/虚拟解决方案并使用您的自定义编译器逻辑覆盖CoreCompile任务。但这确实是在寻找麻烦。至少,您失去了Team Build的所有灵活性WRT构建多个平台和风格。更实际的是,你必须花费大量的时间来调试那些旨在“正常工作”的东西 - 而且还没有好的MSBuild调试器(我知道)。不值得,IMO。
BTW,解决方案文件不会影响Get过程。正如您在第一个链接中看到的那样,Get Team很早就完成了,早在Team Build甚至读取解决方案文件之前。除了<IncrementalGet
&gt;之类的一些选项之外,这根本不是从MSBuild控制的 - 特别是,要下载的路径由与构建定义关联的工作空间映射确定。即,它们存储在Team Build SQL数据库中,而不是文件系统中,并使用调用TFS Web服务API的工具(如团队资源管理器)进行管理。