Je pense que vous pouvez y parvenir sans avoir besoin d'utiliser des tâches personnalisées dans MSBuild 4 native, mais je ne l'ai pas commencé à jouer avec cela encore, donc je ne peux.
Cependant, comme pour MSBuild 3.5 natif, je ne pense pas que ce soit possible - pour pouvoir manipuler les dates, vous devez entrer dans le code. Vous voyez, les métadonnées ModifiedDate sont en interne une chaîne - et pour faire des manipulations sensibles, vous devez convertir en une date. Je ne suis pas sûr de ce qui est dans les tâches Sdc - je ne les utilise pas comme je préfère les CommunityTasks, mais même avec ces tâches, je ne peux pas penser à quelque chose qui fonctionnerait.
Les tâches MSBuild personnalisées ne sont pas si effrayantes - et je recommande que chaque projet (important) ait une solution qui est construite avant toute autre solution qui génère une DLL contenant vos tâches msbuild personnalisées dans un emplacement bien connu (par exemple dossier "lib" à la racine de votre source).
Si vous pouvez autoriser cela comme une solution alors voici une tâche que je viens en cloque qui permet d'atteindre ce que vous voulez:
using System;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace Build.MsBuildTasks
{
public class FindFilesOlderThan : Task
{
[Required]
public ITaskItem[] Files { get; set; }
public int Months { get; set; }
public int Days { get; set; }
public int Years { get; set; }
[Output]
public ITaskItem[] MatchingFiles { get; set; }
public override bool Execute()
{
var olderThan = DateTime.UtcNow.AddYears(-Years).AddMonths(-Months).AddDays(-Days);
MatchingFiles = (from f in Files
where DateTime.Parse(f.GetMetadata("ModifiedTime")) < olderThan
select f).ToArray();
return true;
}
}
}
Vous pouvez ensuite l'utiliser comme ceci:
<UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\lib\Build.MsBuildTasks.dll"
TaskName="Build.MsBuildTasks.FindFilesOlderThan" />
<Target Name="Purge">
<ItemGroup>
<FilesToConsider Include="f:\temp\AzurePackages\**\*.*" />
</ItemGroup>
<FindFilesOlderThan
Files="@(FilesToConsider)"
Months="6">
<Output
TaskParameter="MatchingFiles"
ItemName="FilesToPurge"/>
</FindFilesOlderThan>
<Message Text="FilesToPurge: @(FilesToPurge)" />
</Target>
de bien sûr, YMMV
qu'est-ce que YMMV? thx – Kiquenet
YMMV: votre milage peut varier ... –