我的C ++项目包含一组(非代码)文件,需要逐字复制到输出目录。我将它们作为Content
节点添加到我的.vcxproj中,CopyToOutputDirectory
设置为PreserveNewest
。例如:
<ItemGroup>
<Content Include="util.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="lib_util_needs.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<!-- etc. -->
</ItemGroup>
这几乎有效;当我构建项目时,如果每个内容文件的时间戳比新的内容文件更新,则每个内容文件都会正确地复制到输出目录。 但是 ...如果我更新其中一个内容文件而不同时修改实际编译的代码文件,Visual Studio 2017得出结论该项目已经是最新的,没有构建,并且确实不要将较新版本的内容文件复制到输出目录。我能做些什么吗?不起作用的事情:
PublishState
节点Prerequisite
至Content
DependentUpon
个节点
编辑:经过进一步调查后,行为似乎取决于内容文件的扩展名。例如,dll的行为方式与我想要的一样(项目标记为脏,如果时间戳更新则构建),但exes不会。
答案 0 :(得分:1)
如果(仅)内容项脏了,我怎样才能让VS认为我的项目很脏?
您可以将UpToDateCheckInput
属性设置为项目:
<ItemGroup>
<UpToDateCheckInput Include="util.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</UpToDateCheckInput>
<!-- etc. -->
</ItemGroup>
或者在项目文件中将属性DisableFastUpToDateCheck
设置为true以禁用Visual Studio构建管理器的FastUpToDateCheck
:
<PropertyGroup>
<DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
</PropertyGroup>
检查MSDN有关DisableFastUpToDateCheck的信息:
仅适用于Visual Studio的布尔值。 Visual Studio 构建管理器使用名为FastUpToDateCheck的进程来确定 是否必须重建项目以使其保持最新状态。这个过程是 比使用MSBuild确定这个更快。设置 DisableFastUpToDateCheck属性为true允许您绕过Visual Studio构建管理器并强制它使用MSBuild来确定是否 该项目是最新的
希望这有帮助。