2009-07-22 95 views
2

我正在尝试使用MSBuild和TFS。使用MSBuild和TFS

我设法创建了我自己的MSBuild脚本,该脚本在命令行中效果很好。该脚本与csproj文件一起工作,编译,混淆,签名并复制所需的所有内容。

但是,查看TFS & Team Build的文档后,似乎希望将解决方案作为脚本的“输入”。

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

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

回答

6

团队建设定义约25 targets of its own。当您排队Team Build时,它们会按照@ MSDN列出的预定义顺序自动运行。不要修改这个过程。相反,只需设置一个确定任务如何工作的couple of these properties即可。例如,如果您想要普通获取行为,请将<IncrementalGet>设置为“true”;如果您想要更接近tf get/force,则将其设置为“false”。

就运行您自己的MSBuild脚本而言,这应该不是必需的。从为您提供的TFSBuild.proj文件开始。它应该只需要最小的修改来完成你描述的任何事情。通过覆盖诸如AfterCompile或AfterTest之类的任务来调用您的混淆&签名代码。将您的自动部署代码放入AfterDropBuild中。等

如果您适当地重构,甚至可能是非常复杂的情况。参见过去的回答#1#2

就实际编译而言,Team Build对解决方案的操作是正确的。我建议给它它想要的。我会第一个承认* .sln文件很丑陋,很大程度上没有记录,但至少您将工作卸载到经过良好测试的&受支持产品。

如果你真的想要,你可以给它一个空白/哑解决方案,并用你自定义的编译器逻辑覆盖CoreCompile任务。但这真的是在惹麻烦。至少,你会失去Team Build的所有灵活性WRT构建多种平台和风格。更实际的情况是,你必须花费大量的时间去调试设计为“正常工作”的东西 - 而且还没有好的MSBuild调试器(我知道)。不值得,国际海事组织。

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

+0

我有一个跟进问题 - 你提到我应该在AfterCompile任务中运行混淆/签名。这是推荐的解决方案,还是我可以使用Dotfuscator项目? 另外,Wix项目呢?我怎么能告诉他们从哪里拿走这些文件? – SaguiItay 2009-07-26 15:26:56