ネイティブの MSBuild 4 でカスタム タスクを使用しなくてもこれを実現できると思いますが、まだそれを試していないので、コメントできません。
ただし、ネイティブの MSBuild 3.5 に関しては、可能ではないと思います。日付を操作するには、コードに分割する必要があります。ご覧のとおり、ModifiedDate メタデータは内部的には文字列です。適切な操作を行うには、日付に変換する必要があります。
Sdc タスクに何が含まれているのかわかりません。CommunityTasks の方が好きなので使用しませんが、これらのタスクを使用しても機能するものは何も思いつきません。
カスタム MSBuild タスクはそれほど恐ろしいものではありません。すべての (かなり大きな) プロジェクトには、カスタム msbuild タスクを含む DLL を既知の場所 (「lib」フォルダーなど) に出力する他のソリューションよりも前にビルドするソリューションを用意することをお勧めします。ソースのルートにあります)。
これを解決策として許可できる場合は、あなたが望むものを達成するために私がノックアップしたタスクを次に示します。
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;
}
}
}
次に、次のように使用します。
<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>
もちろん、YMMV