2010-04-11 4 views
0

Je suis en train de sélectionner une liste des dll de test qui contiennent des fichiers de configuration correspondantsétat MSBuild CreateItem inclure, en fonction fichier de configuration

MyTest.Tests.dll
MyTest.Tests.config

Je dois utiliser un createItem que les DLLs ne sont pas disponibles au moment du script chargement

<CreateItem Include="$(AssemblyFolder)\*.Tests.dll" 
      Condition="???" 
    <Output TaskParameter="Include" ItemName="TestBinariesWithConfig"/> 
</CreateItem> 

y at-il une condition que je peux utiliser ou est-ce une mauvaise approche?

Merci
Mac

EDIT:

ok, pour clarifier les choses, je dois construire un fichier de projet xUnit.Net. Je dois faire ceci parce que je cours les essais par le coureur de xUnit.Console par l'intermédiaire de nCover (ne demandez pas!) Mais le long et court de lui est que je peux seulement utiliser un dossier de projet. Le problème que j'ai est quand j'ai une DLL de test avec un fichier .config associé. Sans le fichier de configuration, le testeur échouera.

Cela signifie que j'ai besoin d'ajouter de manière conditionnelle un attribut supplémentaire (fichier de configuration) dans le fichier de projet de test.

Le fichier modèle de projet:

<?xml version="1.0" encoding="utf-8"?> 
<xunit> 
    <assemblies> 
<!-- SAMPLE <assembly filename="Tests.dll" shadow-copy="false" config-file="Tests.dll.config" />  --> 
<!-- @[email protected] --> 
    </assemblies> 
</xunit> 

La tâche FileUpdate pour les dll de test sans fichier de configuration.

<FileUpdate 
    Files="$(AssemblyFolder)\$(XUnitProjectFileName)" 
    Regex="&lt;!-- @[email protected] --&gt;" 
    ReplacementText="&lt;!-- @[email protected] --&gt;%0D%0A&lt;assembly filename='$(AssemblyFolder)\%(TestBinaries.FileName)%(TestBinaries.Extension)' shadow-copy='false' /&gt;" 
    /> 

donc je besoin d'un moyen d'ajouter de façon conditionnelle l'attribut supplémentaire dans la tâche FileUpdate selon que il y a un fichier de configuration correspondant pour la dll de test.

+0

Les commentaires sur ma réponse seraient les bienvenus. – Filburt

+0

Désolé Filburt, peu grossier là-bas. En fait, j'ai pris la facilité et j'ai fini par créer une tâche MSBuild personnalisée pour faire le travail de générer le fichier de projet avant de lire votre réponse. Je ne savais pas utiliser les métadonnées, donc votre approche semble bonne. Merci. –

Répondre

1

Vous pouvez simplement utiliser la sortie MSBuild Task comme source pour votre tâche CreateItem.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <ItemGroup> 
     <ProjectReferences Include="*.*proj" /> 
    </ItemGroup> 

    <Target Name="BuildMyProjects"> 
     <MSBuild 
      Projects="@(ProjectReferences)" 
      Targets="Build"> 
      <Output 
       TaskParameter="TargetOutputs" 
       ItemName="AssembliesBuiltByChildProjects" /> 
     </MSBuild> 
    </Target> 

    <Target Name="AddConfigMetadata" DependsOnTargets="BuildMyProjects"> 
     <CreateItem 
      Include="@(AssembliesBuiltByChildProjects)" 
      AdditionalMetadata="config-file=%(Identity).config"> 
      <Output 
       TaskParameter="Include" 
       ItemName="MySourceItemsWithMetadata" /> 
     </CreateItem> 
    </Target> 

    <Target Name="WhatEverYouLikeToDo" DependsOnTargets="AddConfigMetadata"> 
     <Message Text="%(MySourceItemsWithMetadata.config-file)" /> 
    </Target> 

</Project> 
0

Votre problème est discription pas vraiment clair pour moi, mais votre .Tests.dll de doit toujours être disponible parce que vous devez construire votre projet avant de le tester. Chaque fois que vous avez créé votre projet, vous pouvez exécuter la tâche CreateItem. Le CreateItem est une bonne approche pour récupérer le fichier .dll, mais vous n'avez pas besoin d'une condition pour cela.

Donc, dans votre fichier de construction vous devriez avoir quelque chose comme ceci: - Construire projet/solution -> .dll de seront créés - Exécuter CreateItem - Faire quelque chose avec l'article

Avec cette awnser je En supposant que vous essayez d'automatiser vos tests?

Questions connexes