在我的项目中,我有一个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文件,所以我在唠叨。
答案 0 :(得分:1)
来自目标&#39; Outputs
属性的documentation:
形成输出到此目标的文件。多个文件 用分号分隔。将比较文件的时间戳 使用Inputs中的文件的时间戳来确定是否为Target 是最新的
因此,如果您将Beforebuild目标创建的输出文件的路径添加到它的输出属性,则在每次构建开始时,msbuild将检查这些文件是否存在,如果不存在,它将启动构建,因为现在项目被认为不再是最新的。在实践中使用:
<Target Name="BeforeBuild" Outputs="@(MyDestinationFiles)">