1

私の C++ プロジェクトには、出力ディレクトリに逐語的にコピーする必要がある一連の (コード以外の) ファイルが含まれています。.vcxprojに設定されたContentノードとしてそれらを追加しました。例えば:CopyToOutputDirectoryPreserveNewest

<ItemGroup>
    <Content Include="util.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="lib_util_needs.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <!-- etc. -->
</ItemGroup>

これはほとんど機能します。プロジェクトをビルドすると、タイムスタンプが既存のものよりも新しい場合、各コンテンツ ファイルが出力ディレクトリに正しくコピーされます。しかし...実際のコンパイル済みコード ファイルを同時に変更せずにこれらのコンテンツ ファイルの 1 つを更新すると、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>

または、プロジェクト ファイルでプロパティを true に設定して、Visual Studio ビルド マネージャーDisableFastUpToDateCheckを無効にします。FastUpToDateCheck

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

DisableFastUpToDateCheck についてMSDNを確認します。

Visual Studio のみに適用されるブール値。Visual Studio ビルド マネージャーは、FastUpToDateCheck というプロセスを使用して、プロジェクトを最新の状態に再ビルドする必要があるかどうかを判断します。このプロセスは、MSBuild を使用してこれを判断するよりも高速です。DisableFastUpToDateCheck プロパティを true に設定すると、Visual Studio ビルド マネージャーをバイパスし、強制的に MSBuild を使用してプロジェクトが最新かどうかを判断できます。

お役に立てれば。

于 2018-06-18T05:11:54.883 に答える