0

DLL をディレクトリ A にコピーする DLL POST_BUILD ステップがあります。次に、ディレクトリ A からファイルを削除するとします。その後、Visual Studio 内で F5 キーを押しても、ファイルはコピーされません。

ここでのオプションは何ですか? DLL がリンクされるたびに、およびディレクトリ A 内のファイルが古い (または見つからない) 場合の両方で実行する必要がある一連の操作があることを指定するにはどうすればよいですか?

編集: これは特にアンマネージド C++ プロジェクトであり、CMake によって生成された .vcproj ファイルのみがあります。したがって、私のワークフローでは .vcproj を編集することは実用的ではありません。

4

2 に答える 2

1

ビルド後のコマンドは、プロジェクトを再ビルドする必要があると msbuild が判断した場合にのみ実行されます。それ以外の場合、ビルド後のコマンドを解析しないため、プロジェクトがそのファイルに依存していることを認識しません。これは実用的ではありません。

最も簡単な解決策は、そのファイルを削除しないことです。ほとんど意味がありません。msbuild をよりスマートにする別の方法は、ファイルをプロジェクトに追加することです。プロジェクトを使用して既存のアイテムを追加します。Build action = Content、Copy to Output Directory = Copy if newer を設定します。もちろん、プロジェクトツリーを少し詰まらせます。

于 2011-09-29T16:34:05.780 に答える
1

ハンスのアプローチも良いです。

IDE フックを使用するよりも、プロジェクトを直接編集する方が適切です。msbuild は、必要なことを実行するための完全なタスク セットを提供します。

.csproj ファイルを編集し (右クリック -> プロジェクトのアンロード -> 編集)、ビルド後の手順を追加すると、必要なダーティ コピーの動作が得られます。

<Target Name="AfterBuild">
  <ItemGroup>
    <BuildArtifacts Include="MyDll.dll"/>
    <FileWrites Include="$(DestDir)\*.*" />
  </ItemGroup>
  <Copy SourceFiles="@(BuildArtifacts)" DestinationFiles="->'$(DestDir)\%(Filename)%(Extension)'" />
</Target>
于 2011-09-29T16:43:07.330 に答える