MSBuild目标 - 如何检测.csproj内容文件的更改

时间:2016-11-11 16:33:00

标签: msbuild incremental-build

我想要完成的是在构建期间检测项目的更改,以便我可以设置一个标志,指示项目已更改。我已经弄清楚如何利用增量构建和CoreCompileDependsOn检测C#组件何时发生了变化。但是,当项目的内容文件发生更改时,这似乎不会触发。根据我的理解,会有一个复制任务在某处指定SkipUnchangedFiles =“true”,具体取决于项目中内容文件的设置,复制到输出目录(不复制,始终复制,复制如果更新)。我不完全确定这个过程发生在哪里,可能是Microsoft.CSharp.targets文件?有人可以建议我如何添加一个仅在更新的文件被复制到bin输出时执行的依赖任务?一个非常简单的例子就足够了。

1 个答案:

答案 0 :(得分:2)

我明白了。只有在构建期间更改了“Copy If Newer”设置的任何内容文件时,这将写入一个带有项目名称的文本文件:

      <Target Name="ContentFilesUpdated" AfterTargets="_CopyOutOfDateSourceItemsToOutputDirectory" Condition="'$(IsDesktopBuild)' == 'False'">
    <WriteLinesToFile  
        File="@(ProductChangeFile)"  
        Lines="$(ProjectName)"  
        Overwrite="false"
        Encoding="Unicode" Condition="!Exists('@(ProductChangeFile)')"/>