当(仅).exe 内容项目脏时,如何让 VS 认为我的项目脏?

How can I get VS to consider my project dirty when (only) an .exe Content item is dirty?

我的 C++ 项目包含一组(非代码)文件,需要逐字复制到输出目录。我将它们添加到我的 .vcxproj 作为 Content 节点,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 得出结论该项目已经是最新的,不构建,也不将较新版本的内容文件复制到输出目录。我能做些什么吗?不起作用的东西:

编辑:经过进一步调查,该行为似乎取决于内容文件的扩展名。例如,dll 的行为符合我的要求(如果时间戳已更新,项目将被标记为脏并构建),但 exe 不会。

How can I get VS to consider my project dirty when (only) a Content item is dirty?

您可以将 属性 UpToDateCheckInput 设置为项目:

<ItemGroup>
    <UpToDateCheckInput Include="util.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </UpToDateCheckInput>
    <!-- etc. -->
</ItemGroup>

或者在项目文件中将 属性 DisableFastUpToDateCheck 设置为 true 以禁用 Visual Studio 构建管理器的 FastUpToDateCheck:

<PropertyGroup>
    <DisableFastUpToDateCheck>True</DisableFastUpToDateCheck>
</PropertyGroup>

检查 MSDN 关于 DisableFastUpToDateCheck:

A boolean value that applies to Visual Studio only. The Visual Studio build manager uses a process called FastUpToDateCheck to determine whether a project must be rebuilt to be up to date. This process is faster than using MSBuild to determine this. Setting the DisableFastUpToDateCheck property to true lets you bypass the Visual Studio build manager and force it to use MSBuild to determine whether the project is up to date

希望对您有所帮助。