1

我的 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为节点PrerequisiteContent
  • 将内容文件列为DependentUpon代码文件节点下的节点

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

4

1 回答 1

3

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

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

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

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

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

查看MSDN关于 DisableFastUpToDateCheck:

仅适用于 Visual Studio 的布尔值。Visual Studio 生成管理器使用称为 FastUpToDateCheck 的过程来确定是否必须重新生成项目以保持最新状态。此过程比使用 MSBuild 来确定这一点要快。将 DisableFastUpToDateCheck 属性设置为 true 可以绕过 Visual Studio 构建管理器并强制它使用 MSBuild 来确定项目是否是最新的

希望这可以帮助。

于 2018-06-18T05:11:54.883 回答