Visual studio 在获得输出时生成visual studio';你不会变吗?

Visual studio 在获得输出时生成visual studio';你不会变吗?,visual-studio,msbuild,Visual Studio,Msbuild,在我的项目中,我有一个用于配置的json文件,我将git设置为忽略它。首次克隆存储库时,作为项目一部分并复制到输出目录的配置文件不存在。我使用项目中“BeforeBuild”目标中的任务实现了这一点,如果示例文件不存在,它会将其复制到实际的配置文件中 <Target Name="BeforeBuild"> <ItemGroup> <MySourceFiles Include="Configuration.sample.json" /> <

在我的项目中,我有一个用于配置的json文件,我将git设置为忽略它。首次克隆存储库时,作为项目一部分并复制到输出目录的配置文件不存在。我使用项目中“BeforeBuild”目标中的任务实现了这一点,如果示例文件不存在,它会将其复制到实际的配置文件中

<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>

因此,如果我构建项目,然后删除配置文件并进行构建,则不会发生任何事情,因为我认为没有任何更改会改变输出。是否有方法更改项目文件,以便在必要时标记生成?它不应该经常出现,而且我总是可以手动执行“清理”或“重建”,但由于我刚刚开始学习MSBuild文件,因此它一直困扰着我。

从目标的
输出属性:

形成此目标的输出的文件。有多个文件 用分号分隔。将比较文件的时间戳 用文件的时间戳在输入中确定目标 是最新的

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

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

我认为像
这样的东西应该可以奏效。@stijn做得很好,把这个作为答案,我会接受的