Указание версии Tf.exe и MsBuild в CC.Net - PullRequest
1 голос
/ 18 августа 2011

Проблема

Я портирую сборку на более новую версию CC.Net (с 1.4.4 до самой последней версии 1.6).Ранее сборка смешивала теги <msbuild /> с тегами <exec />, которые вызывают командные файлы с командами tf.exe.

Сборка должна была полагаться на версию исходного кода, совпадающую между msbuild иtf.exe, потому что теперь я получаю сообщение об ошибке tf.exe:

Невозможно определить рабочее пространство.

Когда я запускаю командную строку, сЗапуск от имени того же пользователя, которого использует служба, и вызов той же команды, что и пакетный файл (из того же каталога), я получаю ту же ошибку.

Однако, если я запускаю Visual Studio 2010 в командной строке, с runas и вызовом этой команды (из того же каталога), я не получаю сообщение об ошибке.

Это также имеет смысл, поскольку файл %UserProfile%\Local Settings\Application Data\Microsoft\Team Foundation\3.0\Cache\VersionControl.config имеет отображение рабочей области, но...\1.0\Cache\VersionControl.config файла нет.

Решение, которое я хотел бы попробовать

Я не могу просто изменить PATH для командного файла, потому что онна самом деле нужно построить против старой версии VisualStudio, из-за лицензирования.

Думаю, я мог бы решить эту проблему, указав версию TFS / msbuild, используемую с тегом <msbuild />.Но я не уверен, как это сделать.Я думаю, что это будет какая-то конфигурация сервера, но я ничего не нашел в документации.

Мой вопрос: как мне указать версию TFS, которую круиз-контроль использует для <msbuild />теги?Или есть другой способ решить эту проблему?

Ответы [ 2 ]

1 голос
/ 18 августа 2011

Насколько я знаю, нет способа указать это напрямую с помощью msbuild. У нас это решается тем, что мы устанавливаем исполняемый файл для msbuild в bat-файл, который в основном является копией нужного vcvars -скрипта (используется командной строкой Visual Studio для настройки среды).

<tasks>
      <msbuild>
        <executable>vcvars_VC10_amd64.bat</executable>
        <workingDirectory>SomeFolder</workingDirectory>
        <environment>
            <variable name="foo" value="bar" />
        </environment>
        <projectFile>msbuild.proj</projectFile>
        <buildArgs>/m:2  /p:Configuration=Release /p:Platform=x64 /v:normal</buildArgs>
        <targets>Clean;Build;Test</targets>
        <timeout>3600</timeout>
      </msbuild>
  </tasks>

Может быть, вам не составит труда настроить желаемые пути, используя свойство <environment>.

0 голосов
/ 18 августа 2011

Я не приму это решение, если у людей есть другие решения (или они могут решить проблему, о которой я непосредственно спрашивал), но вот как я в итоге решил свою проблему:

Я добавил синхронизацию рабочей областизадача к началу задач по сборке:

<tasks>
    <exec>
        <description>Sync the workspaces with the TFS server, for the version of TFS used in exec commands</description>
        <executable>Tf.exe</executable>
        <buildArgs>workspaces /s:$(TfsServer)</buildArgs>
    </exec>

Это работает, потому что в моем сценарии меня не заботит управление версиями так же сильно, как и о том, что рабочие пространства не синхронизированы.

...