Visual studio 将带标签的文件提取到TFSBuild中

Visual studio 将带标签的文件提取到TFSBuild中,visual-studio,label,tfsbuild,Visual Studio,Label,Tfsbuild,我相信有一个简单的答案,但我的谷歌fu让我失望 我在TFS2008中有一个团队项目,在使用最新代码时构建OK,但是我现在需要在构建时获取文件子集的早期版本。文件的子集都用相同的标签标记(“下面代码段中的MyLabel”) 我添加到TFSBuild.proj文件中的XML片段如下所示: <PropertyGroup> <BuildLabel>LMyLabel</BuildLabel> </PropertyGroup> <T

我相信有一个简单的答案,但我的谷歌fu让我失望

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

我添加到TFSBuild.proj文件中的XML片段如下所示:

  <PropertyGroup>
    <BuildLabel>LMyLabel</BuildLabel>
  </PropertyGroup>

  <Target Name="BeforeCompile">
    <Get
        TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
        BuildUri="$(BuildUri)"
        Condition=" '$(SkipGet)'!='true' "
        Workspace="$(WorkspaceName)"
        Recursive="$(RecursiveGet)"
        Force="$(ForceGet)"
        Version ="$(BuildLabel)" 
        Preview="false"
    />
  </Target>

艾米拉贝尔
这将成功地将文件子集提取到源区域中,但也会删除源区域中的所有其他文件

i、 e.构建过程执行以下操作:

  • 将所有文件的最新版本提取到源区域
  • 将文件子集的标记版本提取到源区域
  • 从源区域删除所有未标记的文件
  • 运行构建
  • 生成失败,出现以下错误: C:\Program Files(x86)\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets(997,5):错误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>
    
    
    符合事实的
    符合事实的
    错误的
    
    但结果是一样的

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

    (我意识到我可以将基线分支,但出于各种原因,我想首先探讨这种方法)


    提前谢谢

    我想到的只是一个简单的方法:

  • 让您的最新版本进入workspace1
  • 将已标记的版本添加到workspace2
  • XCopy workspace1内容在workspace2上作为post get操作

  • 你觉得怎么样?值得一试吗?

    查看C:\Program Files\MSBuild\Microsoft\VisualStudio\TeamBuild\Microsoft.TeamFoundation.Build.targets,似乎为生成获取的版本由GetVersion属性控制。默认情况下,ForceGet是正确的

    我还没有测试过,但这对我来说意味着

    /property:GetVersion=*versionspec*
    

    当您对生成进行排队时,在MSBuild命令行参数文本框中,它应该获取指定的版本(查找versionspec语法。如果由于某种原因失败,请阅读Aaron Hallberg的文章,直到您比我更好地理解MSBuild:-)

    是的,我想这会起作用。我曾希望会有一个更好的解决办法,但缺乏答案似乎表明情况并非如此。最后,我走上了这条支线,但我会在未来牢记这一点。谢谢