代码之家  ›  专栏  ›  技术社区  ›  dlf

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

  •  0
  • dlf  · 技术社区  · 7 年前

    我的C++项目包括一组(非代码)文件,这些文件需要逐字复制到输出目录中。我把它们作为 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将得出结论,即该项目已是最新的,不会生成,也不会将内容文件的较新版本复制到输出目录。对此我能做些什么吗?不起作用的事情:

    • 设置 PublishState Prerequisite 内容 结点
    • 将内容文件列出为 DependentUpon 代码文件节点下的节点

    编辑:在进一步调查之后,行为似乎取决于内容文件的扩展名。例如,dll的行为方式是我想要的(如果时间戳被更新,则将项目标记为dirty和build),但是exe没有。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Leo Liu    7 年前

    当(只有)一个内容项是脏的时,如何让vs认为我的项目是脏的?

    您可以设置属性 UpToDateCheckInput 项目:

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

    或设置属性 DisableFastUpToDateCheck 在要禁用的项目文件中为true FastUpToDateCheck 对于Visual Studio生成管理器:

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

    检查 MSDN 关于DisableFastUptodateCheck:

    仅适用于Visual Studio的布尔值。Visual Studio 生成管理器使用名为fastupdatecheck的进程来确定 是否必须重建项目才能更新。这个过程是 比使用msbuild来确定这个更快。设置 DisableFastUptopDateCheck属性设置为true可以绕过可视 studio生成管理器并强制它使用msbuild来确定 这个项目是最新的

    希望这有帮助。