如何在后期事件中集成条件逻辑

时间:2010-03-23 12:22:35

标签: c# .net visual-studio visual-studio-2008 msbuild

您好我有一个视觉工作室项目,其中包括以下形式的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>

1 个答案:

答案 0 :(得分:4)

是的,可以使用目标上的InputsOutputs属性。

请参阅: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>

只有输入文件比输出文件更新时才会运行此目标。