2017-09-11 5 views
1

J'ai une cible qui copie les fichiers sources dans un répertoire de transfert, cela se produit pour plusieurs projets. Dans un projet ultérieur, ces fichiers sont passés dans un type de compilateur.Supprimer en toute sécurité les fichiers périmés avec msbuild

Actuellement, ce répertoire de transfert n'est pas nettoyé. Ainsi, lorsqu'un fichier source est supprimé, une copie périmée est conservée dans le répertoire de transfert. Quelle est la meilleure façon de nettoyer ce répertoire de transfert des fichiers périmés sans affecter négativement mes temps de construction incrémentaux? (Sans supprimer complètement le répertoire de mise en scène à chaque fois.)

+0

Je Je ne suis pas vraiment sûr de ce que vous voulez accomplir, peut-être parce que vous utilisez une terminologie étrange. Normalement, quand on parle de «nettoyage» dans le contexte des systèmes de construction, c'est une étape où vous exécutez le contraire d'une «construction» qui supprime tous les artefacts créés par la construction. Donc, il n'y a pas vraiment de différence entre «nettoyer» un répertoire et le supprimer? Je pense que vous voulez dire autre chose, quoi exactement? Fournissez un exemple concret de ce que vous voulez faire. – stijn

+0

@stijn Bien sûr. Pendant la construction, les fichiers du répertoire A sont copiés dans le répertoire B pour un ensemble de projets. Dans un projet ultérieur (même solution), tous les fichiers du répertoire B sont compilés. À aucun moment dans la construction (ou dans une construction propre), les fichiers du répertoire B ne sont supprimés. Ainsi, si vous supprimez un fichier du répertoire A (à partir du contrôle de source), il continuera de fonctionner dans le répertoire B à moins qu'il ne soit supprimé manuellement. Je voudrais un moyen de supprimer ces fichiers «périmés» dans le répertoire B au début d'une construction sans simplement supprimer tout le répertoire B (ce qui aurait un impact sur la construction incrémentielle). Cela a-t-il du sens? – Cuthbert

+0

Trier par. Donc, fondamentalement, vous voulez une étape de construction supplémentaire qui s'exécute avant la construction réelle et qui répertorie tous les fichiers dans le répertoire B, puis supprime simplement ceux qui ne sont pas dans le répertoire A? Ou tout ce que vous avez comme liste principale pour A; vous avez besoin d'une liste quelque part, sinon c'est une supposition. Vous devriez afficher un code indiquant comment la copie est faite, où vous obtenez les fichiers d'entrée, etc. Et ajoutez cette information à votre question (tout comme l'information dans votre commentaire ci-dessus fait également partie de votre question). – stijn

Répondre

0

Nous avons fini en utilisant ce bit de script pour nettoyer les fichiers qui avaient été retirés de la source, mais existent encore dans la destination:

<Target Name="DeleteStaleFiles"> 
    <!-- Remove stale files (files which have been deleted at the source but still exist in the destination). --> 
    <ItemGroup> 
     <SourceFiles Include="@(SourceFiles->'$(Destination)\%(RecursiveDir)%(Filename)%(Extension)')" /> 
     <DestinationFiles Include="$(Destination)**\*.*" /> 
     <StaleFiles Include="@(DestinationFiles)" Exclude="@(SourceFiles)" /> 
    </ItemGroup>  
    <Message Text="Deleting Stale Files: @(StaleFiles, '%0A')" Condition="'@(StaleFiles->Count())' &gt; 0"/> 
    <Delete Files="@(StaleFiles)"/>  
    </Target>