【问题标题】:How to integrate conditional logic in postbuild events如何在构建后事件中集成条件逻辑
【发布时间】:2011-01-30 18:46:14
【问题描述】:

您好,我有一个 Visual Studio 项目,其中包含以下形式的 postbuildevents:

MyTool.exe $(ProjectDir)somesrcfile.txt $(TargetDir)sometargetfile.bin

现在我想添加一些逻辑,说明这些步骤仅在文件发生更改时才会发生。在伪代码中:

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>

【问题讨论】:

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


    【解决方案1】:

    是的,可以通过在目标上使用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>
    

    只有当输入文件比输出文件新时,这个目标才会运行。

    【讨论】:

    • 感谢回复!我只是用一个简单的复制命令尝试了它,但它似乎不起作用。当我构建解决方案时,也不会显示该消息。查看我的编辑。
    • 嗨 codymanix。请查看我的编辑。我刚刚用 MSBuild 3.5 测试了这个例子,它就像一个魅力。只有比 bin 文件更新的文本文件才会被复制。
    • 我现在将您在我的 csproj 文件中给出的示例直接复制到文件末尾的 节点中。什么都没发生。该消息未显示。我已将 Visual Studio 中的 MSBuild 输出设置为“诊断”,目标名称未出现在此处。
    • 你更新了txt文件了吗?否则目标不会运行 :) 另外,尝试从命令行运行 MSBuild 以查看更详细的输出。转到您的项目文件夹并键入:MSBuild.exe /v:d /target:Build(MSBuild.exe 位于 C:\Windows\Microsoft.NET\Framework\v3.5)。然后,在输出末尾的某处,您可能会看到类似:“目标“测试”已跳过,因为与输入文件相比,所有输出文件都是最新的”。
    • 您是否将您的编辑放在 元素之后?如果不把它们移到那个下面。
    猜你喜欢
    • 2021-03-04
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2014-01-10
    • 2021-12-06
    • 2018-09-03
    • 1970-01-01
    相关资源
    最近更新 更多