Team Foundation Build падает в плоской структуре каталогов - PullRequest
4 голосов
/ 07 июля 2010

Я пытаюсь «исправить» сборку на нашем TF-сервере, которая помещает все в папку «drop» в одну большую плоскую копию (а не в отдельные дампы проекта, как это делает локальная сборка), и я получаюнемного расстроен - я буду честен и скажу, что это первый раз, когда я работал с MSBuild, и это как-то обошлось без меня - это не файл сборки, который я настроил с нуля.

Я нашел множество решений в Интернете, и большинство из них указывают на этот блог, , который выглядит хорошо.К сожалению, это, похоже, не решает мои проблемы.

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

<SolutionToBuild Include="$(BuildProjectFolderPath)/../../mySolution.sln">
 <Targets>SomeProject\Project</Targets>
  <Properties>
    CustomizableOutDir=true;
  </Properties>
</SolutionToBuild>

И, насколько я могу судить почто CustomizableOutDir действительно имеет значение true, которое предположительно должно сохранять структуру каталогов.Я попытался отредактировать некоторые файлы проекта, как указано в блоге, примерно так ...

<Target Name="AfterCompile" Condition="'$(TeamBuildOutDir)' != ''">
    <ItemGroup>
       <CompileOutputs Include="$(OutDir)\**\*" />
    </ItemGroup>
    <Copy 
      SourceFiles="@(CompileOutputs)"
      DestinationFolder=
      "$(TeamBuildOutDir)\ProjectName\%(RecursiveDir)" />
</Target>

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

Кто-нибудь имеет представление о том, что может вызывать CustomizableOutDir длявести себя не так, как ожидалось?Или есть проблема с моим кодом файла csproj?

1 Ответ

4 голосов
/ 08 октября 2010

Я видел несколько предложений о том, как передать свойство CustomizableOutDir в msbuild для решения.

  1. Как вы указали в вопросе, добавьте <Properties>CustomizableOutDir=true</Properties> для элемента SolutionToBuild. ( Какой лучший способ заставить TFS выводить каждый проект в его собственную директорию? )
  2. Добавить <CustomizableOutDir>true</CustomizableOutDir> в основную группу объектов ( TFS Build 2008 - Пользовательские выходные каталоги )
  3. Добавить /p:CustomizableOutDir=true в TFSBuild.rsp ( TFS Build 2008 - Пользовательские выходные каталоги )

Я перепробовал все три подхода, и последний вариант (параметр командной строки TFSBuild.rsp) был единственным, с которым я мог работать. Я объединил это с условиями для каждого OutputPath в файлах csproj, а не с целью AfterCompile. Например.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <OutputPath Condition=" '$(TeamBuildOutDir)'=='' ">bin\debug\</OutputPath>
    <OutputPath Condition=" '$(TeamBuildOUtDir)'!='' ">$(TeamBuildOutDir)projectName</OutputPath>
</PropertyGroup> 
...