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