您好我有一个视觉工作室项目,其中包括以下形式的postbuildevents:
MyTool.exe $(ProjectDir)somesrcfile.txt $(TargetDir)sometargetfile.bin
现在我想添加一些逻辑,说明这些步骤只在文件发生变化时才会发生。在peudocode:
if(somesrcfile.txt比sometargetfile.bin更新) { MyTool.exe $(ProjectDir)somesrcfile.txt $(TargetDir)sometargetfile.bin }
我可以使用MsBuild吗?
编辑: 我只是用一个简单的复制命令尝试了它,但似乎没有用。在构建解决方案时,也不会显示该消息。
<ItemGroup>
<MyTextFile Include="*.txt" />
</ItemGroup>
<Target Name="Build" Inputs="@(MyTextFile)" Outputs="@(MyTextFile->'%(Filename).bin')">
<CustomBuild>
<Message>Encoding files...</Message>
<Command>
copy %(Identity) %(Filename).bin
</Command>
<Outputs>$(OutDir)%(Identity)</Outputs>
</CustomBuild>
</Target>
答案 0 :(得分:4)
是的,可以使用目标上的Inputs
和Outputs
属性。
请参阅:How to: Build incrementally
在你的情况下,它看起来像这样:
<Target Name="AfterBuild" DependsOnTargets="Test">
</Target>
<ItemGroup>
<MyTextFile Include="*.txt" />
</ItemGroup>
<Target Name="Test" Inputs="@(MyTextFile)" Outputs="@(MyTextFile->'%(FileName).bin')">
<Message Text="Copying @(MyTextFile)" Importance="high"/>
<Copy SourceFiles="@(MyTextFile)" DestinationFiles="@(MyTextFile->'%(FileName).bin')" />
</Target>
只有输入文件比输出文件更新时才会运行此目标。