9

msbuild で 2 つの日時スタンプを比較しようとしています。私は次のことをしました:

<CreateItem Include="@(Compile)->'@(Compile).cache'" 
            Condition="('%(Compile.ExcludeFromStyleCop)' != 'true') and ('%(Compile.ExcludeFromSourceAnalysis)' != 'true') and (@(Compile.ModifiedTime) > @(Compile.cache.ModifiedTime))">
    <Output TaskParameter="Include" ItemName="StyleCopFiles"/>
</CreateItem>

ただし、次をスローします。

エラー MSB4086: 条件 "('%(Compile.ExcludeFromStyleCop)' != 'true' で、数値ではなく "@(Compile.ModifiedTime)" に評価される "@(Compile.ModifiedTime)" で数値比較が試行されました) および ('%(Compile.ExcludeFromSourceAnalysis)' != 'true') および (@(Compile.ModifiedTime) > @(Compile.cache.ModifiedTime))". [c:\dev\apt\DotNetMvc\src\Apt.Lib.Data.Elmah\Apt.Lib.Data.Elmah.csproj]

msbuild で 2 つの日時スタンプを比較するにはどうすればよいですか?

4

3 に答える 3

10

ここでのはるかに簡単な解決策は、プロパティ関数を使用して DateTime オブジェクトを整数に変換し、Ticks プロパティにアクセスすることです。

名前付きファイルの場合:

$([System.IO.File]::GetLastWriteTime('SomeFile.bin').Ticks)

またはアイテムのメタデータから:

$([System.DateTime]::Parse('%(ItemGroup.ModifiedTime)').Ticks)

次に、次のような条件式を使用して項目を比較できます。

Condition="($([System.DateTime]::Parse('%(ItemGroup.ModifiedTime)').Ticks) > $([System.IO.File]::GetLastWriteTime('SomeFile').Ticks)))"

ここでの質問の場合、これでうまくいくと思います:

Condition="($([System.DateTime]::Parse('%(Compile.ModifiedTime)').Ticks) > ($([System.DateTime]::Parse('%(Compile.cache.ModifiedTime)').Ticks)"
于 2016-08-29T05:51:35.167 に答える