Извлечение помеченных файлов в TFSBuild - PullRequest
1 голос
/ 23 августа 2011

Я уверен, что есть простой ответ на этот вопрос, но мой google-fu меня не устраивает.

У меня есть командный проект в TFS 2008, который работает нормально при использовании последнего кода, однако теперь у меня естьнужно выбрать предыдущие версии подмножества файлов во время сборки.Подмножество файлов помечено одинаковой меткой («MyLabel» в приведенном ниже фрагменте).

Фрагмент XML, который я добавил в файл TFSBuild.proj, выглядит следующим образом:

  <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>

Это успешно извлекает подмножество файлов в исходную область, но также удаляет все остальные файлы в исходной области.

т.е. процесс сборки делает следующее:

  1. извлекать последние версии всех файлов в исходную область
  2. извлекать помеченную версию подмножества файлов в исходную область
  3. удалять все немаркированные файлы из исходной области
  4. runbuild

Сборка завершается с ошибкой: C: \ Program Files (x86) \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets (997,5): ошибка MSB3491: Не удалось записать строки в файл "[каталог сборки] \ Sources \ MySolution.sln.x64.Release.vsprops".Не удалось найти часть пути '[каталог сборки] \ Sources \ MySolution.x64.Release.vsprops'.

(что в основном означает, что не может найти решение, поскольку оно было удалено)

Я попытался добавить следующий фрагмент в конец XML:

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

, но результат тот же.

Итак, мой вопрос: как сделатьЯ строю свое решение, когда оно представляет собой смесь последних версий и старых версий с маркировкой?Чего мне не хватает?

(я понимаю, что могу просто изменить базовую линию, но по разным причинам я хотел бы сначала изучить этот подход)

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 29 сентября 2011

Глядя на C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets, выясняется, что версия, выбранная для сборки, контролируется свойством GetVersion.И этот ForceGet является истинным по умолчанию.

Я не проверял его, но это подразумевает, что если вы поставите

/property:GetVersion=*versionspec*

в текстовом поле Аргументы командной строки MSBuild, когда вы ставите в очередьbuild, он должен получить указанную версию (смотрите здесь для синтаксиса versionpec. Если по какой-то причине это не получается, читайте blog Аарона Халберга, пока вы не поймете msbuild лучше, чем я: -)

0 голосов
/ 15 сентября 2011

Просто простой подход, который приходит на ум:

  1. Загрузите последнюю версию в рабочее пространство1
  2. Получите вашу помеченную версию в workspace2
  3. Содержимое рабочей области XCopy1 над рабочей областью2 как действие после получения

Что ты думаешь? Стоит попробовать?

...