2011-08-23 36 views
1

我确信有一个简单的答案,但我的google-fu失败了。将标记文件提取到TFSBuild中

我在TFS 2008中有一个团队项目,在使用最新的代码时生成OK,但是现在我需要在构建时获取文件子集的先前版本。文件的子集都标有相同的标签(下面片段中的“MyLabel”)。

我加入是TFSBuild.proj文件的XML片断如下:

这成功地提取文件到源区的子集,但它还会删除源中的所有其他文件区。

即构建过程将执行以下操作:

  1. 获取所有文件的最新版本到源区
  2. 获取文件的子集的标记版本到源区
  3. 删除所有非标记从源区域中的文件
  4. 运行建立

构建失败,出现以下错误: C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets(997,5):error MSB3491:无法将行写入文件“[build directory] ​​\ Sources \ MySolution。 sln.x64.Release.vsprops”。找不到路径'[build directory] ​​\ Sources \ MySolution.x64.Release.vsprops'的一部分。

(这基本上表明它无法找到解决方案,因为它已经被删除)

我试着将下面的代码片断到XML的底部:

<PropertyGroup> 
    <SkipClean>true</SkipClean> 
    <SkipInitializeWorkspace>true</SkipInitializeWorkspace> 
    <ForceGet>false</ForceGet> 
    </PropertyGroup> 
</Project> 

但结果是一样的。

所以,我的问题是:如果我的解决方案是最新版本和旧版本的混合标签版本,我该如何构建解决方案?我错过了什么?

(我知道我可以只分支基线但由于种种原因,我想先探索这种方法)提前

谢谢!

回答

0

只是一个简单的办法,浮现在脑海中:

  1. 让您的最新版本,以工作空间1
  2. 让您的标记版本workspace2
  3. 的XCopy在workspace2工作空间1内容作为后得到行动

你觉得呢?值得尝试吗?

+0

是的,我猜这会起作用。我曾希望能有一个更好的解决方案,但是缺乏答案似乎表明了另外一点。最后,我走下了分支路线,但我将为未来铭记这一点。谢谢。 – glumesc

0

看着C:\ Program Files \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets,看起来版本获取的版本是由GetVersion属性控制的。 ForceGet默认为true。

我没有测试过,但是这意味着对我说,如果你把

/property:GetVersion=*versionspec* 

在MSBuild的命令行参数的文本框,当你排队的构建,应该读出指定版本(看here为如果由于某种原因导致失败,请阅读Aaron Hallberg的blog,直到你理解msbuild比我更好:-)