当输出无法改变时,使视觉工作室构建?

时间:2015-12-08 09:48:15

标签: visual-studio msbuild

在我的项目中,我有一个json文件,我用于配置,我有git设置忽略。首次克隆存储库时,作为项目一部分并复制到输出目录的配置文件不存在。我已经使用“之前的建设”中的任务来完成这项任务。项目中的目标,如果它不存在,将把样本文件复制到实际的配置文件中。

<Target Name="BeforeBuild">
  <ItemGroup>
    <MySourceFiles Include="Configuration.sample.json" />
  </ItemGroup>
  <ItemGroup>
    <MyDestinationFiles Include="Configuration.json" />
  </ItemGroup>
  <Message Importance="high" Condition="!Exists('@(MyDestinationFiles)')" 
           Text="Copying @(MySourceFiles) to @(MyDestinationFiles)" />
  <Copy Condition="!Exists('@(MyDestinationFiles)')" 
        SourceFiles="@(MySourceFiles)" 
        DestinationFiles="@(MyDestinationFiles)" />
</Target>

因此,如果我构建项目,然后删除配置文件并进行构建,没有任何反应,因为没有进行任何更改我认为会改变输出的更改。有没有办法更改项目文件,以便在必要时标记构建?它不应该经常出现,我总是可以做一个&#39;清洁&#39;或者&#39;重建&#39;手动,但是因为我刚刚开始学习MSBuild文件,所以我在唠叨。

1 个答案:

答案 0 :(得分:1)

来自目标&#39; Outputs属性的documentation

  

形成输出到此目标的文件。多个文件   用分号分隔。将比较文件的时间戳   使用Inputs中的文件的时间戳来确定是否为Target   是最新的

因此,如果您将Beforebuild目标创建的输出文件的路径添加到它的输出属性,则在每次构建开始时,msbuild将检查这些文件是否存在,如果不存在,它将启动构建,因为现在项目被认为不再是最新的。在实践中使用:

<Target Name="BeforeBuild" Outputs="@(MyDestinationFiles)">