2010-07-20 2 views
0

J'ai besoin de rassembler dans un seul dossier tous les assemblages de test, avec leurs dépendances, et les fichiers de configuration. Le processus devrait préserver la structure du répertoire de la sortie de chaque projet de test. Nous avons une solution qui nécessite d'attacher manuellement des projets de test à un projet maître, mais notre solution a beaucoup trop de projets pour que cela soit maintenable. Ceux-ci doivent être localisés automatiquement en fonction de la convention de nommage (x.UnitTest.csproj, y.IntegrationTest.csproj). Pour l'arrière-plan, nous travaillons avec un système de construction qui transmet les artefacts (binaires, etc.) entre les agents. Nous compilons sur un agent et testons sur d'autres agents. La duplication massive des assemblages entre les projets de test ralentit le processus de construction. Ce que j'ai fait: 1) J'ai un csproj qui référence la plupart des projets de test. Cela obtient des binaires et des dépendances dans un dossier. 2) Je suis en mesure d'identifier tous les fichiers à copier à l'aide de cetteComment agréger les sorties d'un ensemble de projets générés dynamiquement dans un seul dossier

<CreateItem 
    Include="%(ProjectReference.RootDir)%(ProjectReference.Directory)$(OutDir)*.config"> 
<Output TaskParameter="Include" ItemName="TestConfigurationFiles"/> 
</CreateItem> 

<Copy 
     SourceFiles="@(TestConfigurationFiles)" 
     DestinationFolder="$(OutDir)"> 
</Copy> 

J'ai essayé des choses les plus évidentes, comme

  • MSBuild: RebaseOutputs attribut, remplaçant la propriété OutDir. Je peux fournir à la tâche msbuild un ensemble de sorties générées dynamiquement, mais je peux seulement les construire dans leur dossier par défaut.

  • Accrochage dans les TargetOutputs de tâche msbuild ne donne que l'ensemble de sortie primaire (sans dépendances). J'ai expérimenté avec "Copier Toujours" pour les fichiers de configuration . Cela les place dans le répertoire de sortie du projet dépendant en tant que "app.config" et non "dllname.config", et non dans le projet final .

Solutions qui pourraient faire cela mieux pourraient inclure

  • donner un exemple d'ajouter au tableau de l'élément de projectreference dynamiquement, avant la compilation. Utilisez msbuild TargetOutputs pour créer une liste de tous les fichiers du dossier (au lieu de simplement la sortie principale) et copiez-les dans un dossier de destination.

Aujourd'hui j'utilise msbuild 3.5. Idéalement, la solution fonctionnerait avec msbuild 3.5. Nous passons bientôt à .NET 4/MsBuild 4, donc, si cela doit être fait en .Net 4, c'est bien.

Répondre

0

Avez-vous envisagé d'aplatir la structure des dossiers lorsque vous exportez vos artefacts?

Quelque chose comme:

src/*.UnitTest*/bin/**/*.* -> /testlibs 
src/*.IntegrationTest*/bin/**/*.* -> /testlibs 
+0

Je dois maintenir la structure du dossier. – Precipitous

Questions connexes