当(仅).exe内容项脏了时,我怎样才能让VS认为我的项目很脏?

时间:2018-06-15 18:53:13

标签: visual-studio msbuild visual-studio-2017 project vcxproj

我的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的行为方式与我想要的一样(项目标记为脏,如果时间戳更新则构建),但exes不会。

1 个答案:

答案 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来确定是否   该项目是最新的

希望这有帮助。