ビルド後のイベントでXCOPYを使用して、コンパイル済みDLLを出力フォルダーからメインアプリの出力フォルダーにコピーしています。 DLLは、次のように、メインアプリ出力フォルダーの「Modules」サブフォルダーにコピーされます。
xcopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"
Modulesフォルダーが存在する場合、コマンドは正常に機能しますが、テスト中にフォルダーが存在しない場合、XCOPYが作成せず、コマンドが失敗することがわかりました。
フォルダーが存在しない場合にフォルダーを作成するXCOPYスイッチはありますか?そうでない場合、フォルダーが存在しない場合、ビルド後のイベントに何を追加してフォルダーを作成しますか?ご協力いただきありがとうございます。
私はこれをコマンドラインで試しました
D:\>xcopy myfile.dat xcopytest\test\
ターゲットディレクトリが適切に作成されました。
そうでない場合は、mkdir
のコマンド拡張を有効にしてcmd
コマンドを使用してターゲットディレクトリを作成できます。
cmd /x /c mkdir "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\"
( '/ x'は、システムでデフォルトで有効になっていない場合にコマンド拡張機能を有効にします。私はcmd
に精通していません)
つかいます
cmd /?
mkdir /?
xcopy /?
詳細については :)
「/ 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-宛先がディレクトリであると想定します(ただし、末尾は\でなければなりません)
PostBuildステップは嫌いです。ビルドツールの範囲外で多くのことを行うことができます。 MSBuildでコピープロセスを管理し、更新を行う方が良いと考えています。 .csprojファイルは次のように編集できます。
<Target Name="AfterBuild" Inputs="$(TargetPath)\**">
<Copy SourceFiles="$(TargetPath)\**" DestinationFiles="$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules\**" OverwriteReadOnlyFiles="true"></Copy>
</Target>
Xcopyで/ iを使用します。ディレクトリが存在しない場合は、ディレクトリが作成されます。
Robocopyを使用できます。
robocopy "$(TargetPath)" "$(SolutionDir)Prism4Demo.Shell\$(OutDir)Modules" /E
私はcommand.itでこれを試しました。私のために働いています。
if "$(OutDir)"=="bin\Debug\" goto Visual
:TFSBuild
goto exit
:Visual
xcopy /y "$(TargetPath)$(TargetName).dll" "$(ProjectDir)..\Demo"
xcopy /y "$(TargetDir)$(TargetName).pdb" "$(ProjectDir)..\Demo"
goto exit
:exit
/ Eを試してください
オプションの完全なリストを取得するには:xcopy /?
簡単な短い答えはこれです:
xcopy /Y /I "$(SolutionDir)<my-src-path>" "$(SolutionDir)<my-dst-path>\"