MSBuild & TFS2010 Найти Dlls - PullRequest
       32

MSBuild & TFS2010 Найти Dlls

1 голос
/ 13 апреля 2011

Я пытаюсь создать пользовательскую задачу MSBuild, которая будет запускать мои тесты nUnit локально или во время сборки TFS2010. Сценарий прекрасно работает локально, но я не могу найти тестовые библиотеки на сервере сборки TFS. Я использую задачу в пакете MSBuild.ExtensionPack для запуска модульных тестов (опять же, локально это работает нормально).

Список сборок всегда пуст. TargetDir показывает путь "C: \ Builds \ 2 \ Product1 \ ci.product1.acme.com \ Binaries \", который мне подходит. Я также попытался запустить свою цель после цели CoreCompile вместо цели AfterBuild без изменений.

Возможно, я допустил какую-то глупую ошибку, но сейчас я нахожусь в режиме "убей меня". Пожалуйста, помогите.

  <PropertyGroup>
    <RunTFSBuild>false</RunTFSBuild>
    <SolutionDirectory>$(MSBuildProjectDirectory)\..</SolutionDirectory>
    <ExtensionTasksPath>$(SolutionDirectory)\_shared\MSBuild\</ExtensionTasksPath>
    <TPath>$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks</TPath>
    <NUnitOutputFile>$(SolutionDirectory)\nUnitResults.xml</NUnitOutputFile>
    <NUnitOutputFileAsMsTest>$(SolutionDirectory)\nUnitResultsAsMsTestResults.xml</NUnitOutputFileAsMsTest>
    <ToolPath>$(SolutionDirectory)\_shared\MSBuild\nUnit_2.5.7</ToolPath>
  </PropertyGroup>
  <Import Project="$(TPath)" />

  <Target Name="AfterBuild">     
    <CallTarget Condition="$(RunTFSBuild)!='true'" Targets="NUnitTestRunner" />
    <CallTarget Condition="$(RunTFSBuild)=='true'" Targets="NUnitTestRunner;TFSNUnitTestRunner" />
  </Target>
  <Target Name="NUnitTestRunner">
    <ItemGroup >
      <Assemblies Include="$(SolutionDirectory)\**\bin\$(Configuration)\*.nUnit.Tests.dll" />
    </ItemGroup>
    <ItemGroup Condition="$(RunTFSBuild)=='true'">
      <Assemblies Include="$(TargetDir)\**\*.nUnit.Tests.dll" />
    </ItemGroup>

    <Message Text="SolutionDirectory=$(SolutionDirectory)" />
    <Message Text="ExtensionTasksPath=$(ExtensionTasksPath)" />
    <Message Text="TargetDir=$(TargetDir)" />
    <Message Text="TPath=$(TPath)" />
    <Message Text="NUnitOutputFile=$(NUnitOutputFile)" />
    <Message Text="Running nUnit tests from: $(Assemblies)" />

1 Ответ

1 голос
/ 13 апреля 2011

1) Попробуйте изменить свойство RunTFSBuild

<RunTFSBuild Condition="'$(RunTFSBuild)'==''">false</RunTFSBuild>

2) Заменить разделы (это может быть просто очистка проекта, но это может быть очень важно из-за некоторых ограничений CallTarget):

<Target Name="AfterBuild" DependsOnTargets="NUnitTestRunner;TFSNUnitTestRunner" />     
<Target Name="TFSNUnitTestRunner" 
        Condition="$(RunTFSBuild)=='true'">
    <!-- TFSNUnitTestRunner Body -->
</Target>

3) Если 1) и 2) бесполезны, попробуйте установить подробное описание сборки для диагностики (клавиша msbuld / v: diag ). Найдите в журнале все вызовы TFSNUnitTestRunner, и вы увидите, что на самом деле происходит в TFS.

РЕДАКТИРОВАТЬ: * Сборки * объявляется как ItemGroup. Используйте @ (Сборки) для доступа к элементам:

<Message Text="Running nUnit tests from: @(Assemblies)" />

Свойство $ (Сборки) будет всегда пустым в вашем случае.

...