86

ビルド後のイベントで XCOPY を使用して、コンパイル済みの DLL を出力フォルダーからメイン アプリの出力フォルダーにコピーしています。DLL は、次のように、メイン アプリの出力フォルダーの "Modules" サブフォルダーにコピーされます。

xcopy  "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\" 

Modules フォルダーが存在する場合、コマンドは正常に機能しますが、フォルダーが存在しない場合、XCOPY はフォルダーを作成せず、コマンドが失敗することをテスト中に発見しました。

フォルダが存在しない場合にフォルダを作成する XCOPY スイッチはありますか? そうでない場合、ビルド後のイベントに何を追加して、フォルダーが存在しない場合にフォルダーを作成しますか? ご協力いただきありがとうございます。

4

9 に答える 9

124

「/I」を使用する答えは機能していますが、少しトリックがあります。ターゲットでは、ターゲットがファイルではなくディレクトリであることをxcopyに伝えるために、文字\で終了する必要があります。

例:

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder" /F /R /Y /I

動作せず、コード2を返しますが、これは次のとおりです。

xcopy "$(TargetDir)$(TargetName).dll" "$(SolutionDir)_DropFolder\" /F /R /Y /I

私のサンプルで使用されているコマンドライン引数:

/F-完全なソースおよびターゲットファイル名を表示します

/R-これは読み取り専用ファイルを上書きします

/Y-既存のファイルを上書きするプロンプトを抑制します

/ I-宛先がディレクトリであると想定します(ただし、\で終わる必要があります)

于 2012-03-27T15:44:37.543 に答える
58

これをコマンドラインで使用してみました

D:\>xcopy myfile.dat xcopytest\test\

ターゲットディレクトリが正しく作成されました。

そうでない場合は、コマンド拡張機能を有効にしてmkdirコマンドを使用してターゲットディレクトリを作成できます。cmd

cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"

(「/ x」は、システムでデフォルトで有効になっていない場合にコマンド拡張を有効にします。私はあまり詳しくありませんcmd

使用する

cmd /? 
mkdir /?
xcopy /?

詳細については :)

于 2011-03-03T02:11:35.910 に答える
15

xcopyで/iを使用すると、ディレクトリが存在しない場合は、ディレクトリが作成されます。

于 2011-05-07T03:18:24.230 に答える
15

私はPostBuildステップが嫌いです。それは、ビルドツールの範囲外で多くのことが起こることを可能にします。MSBuildにコピープロセスを管理させ、更新を行わせる方がよいと思います。.csprojファイルは次のように編集できます。

  <Target Name="AfterBuild" Inputs="$(TargetPath)\**">
    <Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy>
  </Target>
于 2011-03-03T02:11:46.530 に答える
6

ロボコピーを使用できます:

robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E
于 2011-03-03T02:20:51.547 に答える
0

/E を試す

オプションの完全なリストを取得するには: xcopy /?

于 2011-03-03T02:04:11.023 に答える