2016-11-11 71 views
0

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

+0

这可能不是你想要的,但是你能不能让它成为一个git repo,并用git命令运行一个脚本来查看是否有任何upstaged更改? –

+0

不幸的是,这是在一家只使用TFS的公司。另外,我可以在TFS中做同样的事情,但我不想使用VCS来识别更改,因为我必须将更改映射回项目,以便识别产品名称。如果我使用MSBuild目标,那么如果项目中的任何内容发生更改,我已经有关于该项目的详细信息。 –

+0

我无法帮助,因为我的MS构建知识不是很好,但是我的另一个直觉是看着咕噜声或吞咽。 –

回答

2

我想通了。这将写有该项目的名称的文本文件只如果有“复制如果较新的”设置任何内容的文件已经在构建过程中被改变:

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