4 votes

Team Foundation Build tombe dans une structure de répertoire plate

J'essaie de "réparer" une construction sur notre serveur TF qui dépose tout dans le dossier Drop en une seule fois (plutôt que dans des dumps de projets séparés comme le ferait une construction locale), et je suis un peu frustré - je vais être honnête et dire que c'est la première fois que je travaille avec MSBuild et que cela m'a été imposé - ce n'est pas un fichier de construction que j'ai configuré à partir de zéro.

J'ai trouvé un certain nombre de solutions en ligne, et la plupart d'entre elles se réfèrent à ce blog, ce qui est une bonne chose. Malheureusement, il ne semble pas du tout résoudre mes problèmes.

Dans TFSBuild.proj, j'ai un morceau de code qui ressemble à ceci :

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

Et pour autant que je puisse en juger, CustomizableOutDir est effectivement réglé sur true, ce qui devrait conserver la structure des répertoires. J'ai essayé d'éditer certains fichiers du projet comme indiqué dans le blog, comme ceci...

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

Mais cela se comporte bizarrement - si je modifie plusieurs fichiers de projet, je commence à obtenir ce qui suit regards J'obtiens une structure de répertoire qui contient des dossiers comme MyProj1 et MyProj2, mais MyProj2 semble avoir reçu tous les résultats de MyProj1 (MyProj1 fonctionne comme je l'espérais). De plus, le dossier de dépôt encore a tout le reste déversé en une seule fois (les répertoires contiennent des duplicatas de ce déversement).

Quelqu'un a-t-il une idée de la raison pour laquelle CustomizableOutDir ne se comporte pas comme prévu ? Ou y a-t-il un problème avec le code de mon fichier csproj ?

4voto

Daniel Ballinger Points 4883

J'ai vu plusieurs suggestions sur la façon de passer la propriété CustomizableOutDir à msbuild pour une solution.

  1. Comme vous l'avez indiqué dans la question, ajoutez <Properties>CustomizableOutDir=true</Properties> pour l'élément SolutionToBuild. ( Quelle est la meilleure façon de faire en sorte que TFS produise chaque projet dans son propre répertoire ? )
  2. Ajouter <CustomizableOutDir>true</CustomizableOutDir> au groupe de propriétés principal ( TFS Build 2008 - Répertoires de sortie personnalisés )
  3. Ajouter /p:CustomizableOutDir=true à TFSBuild.rsp ( TFS Build 2008 - Répertoires de sortie personnalisés )

J'ai essayé les trois approches et la dernière option (l'option de ligne de commande TFSBuild.rsp) est la seule que j'ai pu faire fonctionner. J'ai combiné cela avec des conditions sur chaque OutputPath dans les fichiers csproj plutôt qu'avec une AfterCompile Target. Par exemple

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X