web-dev-qa-db-ja.com

ビルド中にVisual Studioプロジェクトファイルを出力ディレクトリにコピーする

Visual Studioプロジェクトをビルドすると、実行可能ファイルはプロジェクトのプロパティページで指定された出力ディレクトリに書き込まれます。

いくつかの余分なファイルがあるプロジェクトがあります(例、.iniファイル)プログラムによって使用されます。

プログラムを実行したときに、CWDに他のファイルのコピーがあるように、ファイルを出力ディレクトリにコピーするようにプロジェクトを構成するにはどうすればよいですか?

ファイルのプロパティページをチェックしましたが、ビルドからそれを除外するオプション(無効になっている)以外に有用なものはなく、custom-build-toolコマンドは空です(さらに、それを行うプレーンテキストファイルです)処理の必要はありません)。

35
Synetech

ファイルのプロパティページでビルドアクションフィールドを検索しているときに、カスタムビルドステップをcopyファイル(手動)に設定するという考えがありました。これは思ったより簡単だった。 cmdまたはその他の外部実行可能ファイル(xcopyrobocopyなど)を使用する必要があると考えていましたが、それは必要ではありません。

次のようにカスタムビルドステップを設定します。

_Command Line : copy $(InputFileName) $(OutDir)
Description  : Copying foobar...
Outputs      : $(InputFileName)
_

VSが常にプロジェクトが古いと再構築する必要があると考えることを防ぐために、出力フィールドを(正しく)設定することは重要でした(接頭辞$(OutDir)\が必要かどうかはわかりません)。

次のような出力ウィンドウに反映されます。

_Copying foobar...
        1 file(s) copied.
Compiling resources...
Linking...
_
5
Synetech

Visual Studio 2003の出力ディレクトリにファイルをコピーするには、ビルド後イベントを使用できます。

  1. プロジェクトを右クリック->プロパティ
  2. 共通プロパティ->ビルドイベント
  3. ビルド後のイベントコマンドラインを次のように設定します

    xcopy /y $(ProjectDir)my_file.ini  $(ProjectDir)$(OutDir)
    
  4. OK、ビルド!

37
Dmitry Pavlov

ソリューションエクスプローラーでファイルを選択してみてください。次に、プロパティウィンドウでそのプロパティを確認できるはずです(を押します F4 表示されていない場合)。次の2つのプロパティがあります。

  • 「ビルドアクション」および
  • 「出力ディレクトリにコピー」

[ビルドアクション]を[コンテンツ]に設定し、[出力ディレクトリにコピー]設定に適切な値を選択します。

「ビルドアクション」および「出力ディレクトリにコピー」設定を含むファイルプロパティウィンドウ

File properties window with "Build Action" and "Copy to Output Directory" settings

上記の方法で問題が解決しない場合は、この投稿「 。infファイルで出力ディレクトリにコピーする 」をお読みください。そして、これを見て、「 Visual Studio:デフォルト以外のファイルタイプのデフォルトビルドアクション

役立つことを願っています

27
Dmitry Pavlov

VS 2017の場合、Dmitry Pavlovが送信するコマンドは次のとおりです。

xcopy /y "$(ProjectDir)my_file.ini"  "$(OutDir)"

プロジェクトディレクトリへのパスにスペースがある場合、引用符は重要です。

2
Kieran Chandler

これが誰かを助ける場合、私は別のプロジェクトに構築していたプロジェクトの出力dllをコピーする必要がありました。

xcopy /y "$(ProjectDir)$(OutDir)$(TargetName)$(TargetExt)" 
"C:\Application\MyApplicationName\bin\x86\Debug"

/y = overwrite file if already exists
$(ProjectDir) = location on your machine where the project lives
$(OutDir) = is where your current build setup outputs the build
$(TargetName) = What the project being built is set to be called. Ex: XXX of XXX.dll
$(TargetExt) = the extension of the build Ex: .dll of XXX.dll

"C:/..../x86/Debug" is the location to copy to.
1
vbp13

Synetechの回答の改善:

VS 2013 C++プロジェクトでは、コマンドライン:copy%(Identity)$(OutDir)説明:Copying foobar ...出力:%(Identity)動作しますが、循環依存関係になります。ビルド、メーターは既にコピーされていません。

これを解決するには、そのアイテムをターゲットフォルダーに追加し、パスを$(OutDir)に変更し、最初に追加されたアイテムで出力として使用します。欠点-同じような名前の2つのアイテムが解決されています。

また、postbuildで/ d/yパラメータを指定したxcopy-対象ファイルの日付が古い場合にのみコピーします。

0
user1837919

追加の$(OutDir)が必要です。そうしないと、再構築/クリーンステップでソースが破棄されます。

CommandLine : copy "$(SolutionDir)last-script.js" "$(TargetDir)Debug"

Outputs  : $(TargetDir)Debug\last-script.js
0
roland roos