Visual Studioビルド後イベント-相対ディレクトリの場所にコピー
-
08-07-2019 - |
質問
ビルドが成功したら、出力ディレクトリの内容を同じ" base" フォルダーの下の別の場所にコピーします。この親フォルダーは相対的な部分であり、ソース管理設定に基づいて異なる場合があります。
利用可能なマクロ値のいくつかをリストしました...
$(SolutionDir)= D:\ GlobalDir \ Version \ AppName \ Solution1 \ build
$(ProjectDir)= D:\ GlobalDir \ Version \ AppName \ Solution1 \ Version \ ProjectA \
出力ディレクトリの内容を次のフォルダーにコピーしたい:
D:\ GlobalDir \ Version \ AppName \ Solution2 \ Project \ Dependency
ベースの場所" D:\ GlobalDir \ Version \ AppName"上記のマクロのいずれかから取得する必要があります。ただし、親の場所をリストするマクロ値はありません 。
ポストビルドコピーコマンドのベースロケーションをのみ抽出するにはどうすればよいですか
解決
TargetDirまたは他のマクロのいずれも適切な場所を指していない場合は、" .."フォルダ階層をさかのぼるディレクトリ。
ie。 $(SolutionDir)\ .. \ ..
を使用して、ベースディレクトリを取得します。
すべてのマクロのリストについては、こちらをご覧ください:
他のヒント
プロジェクトのビルド後イベントコマンドラインに入力する内容は次のとおりです。
copy /Y "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)lib\$(ProjectName).dll"
編集:または、ターゲット名がプロジェクト名と異なる場合。
copy /Y "$(TargetDir)$(TargetName).dll" "$(SolutionDir)lib\$(TargetName).dll"
試すことができます:
$(SolutionDir)..\..\
これは関連していると思いますが、 msbuild
コマンドラインを使用して(バッチファイルから)直接ビルドする場合とVS内からビルドする場合に問題がありました。
次のようなものを使用します:
<PostBuildEvent>
MOVE /Y "$(TargetDir)something.file1" "$(ProjectDir)something.file1"
start XCOPY /Y /R "$(SolutionDir)SomeConsoleApp\bin\$(ConfigurationName)\*" "$(ProjectDir)App_Data\Consoles\SomeConsoleApp\"
</PostBuildEvent>
(注: XCOPY
ではなく start XCOPY
を使用して、コピーを妨げるアクセス許可の問題を回避しました)
バッチファイルからmsbuildを実行すると、マクロ $(SolutionDir)
が .. \
と評価され、 XCOPY
コマンドが失敗しました。それ以外の場合は、Visual Studio内から構築したときに正常に機能しました。評価された出力を確認するには、 / verbosity:diagnostic
を使用して確認しました。
代わりにマクロ $(ProjectDir).. \
を使用すると、同じことになるが、両方のビルドシナリオで正常に機能し、フルパスが保持された。
msbuildを直接使用しても意味がありませんか?すべてのビルドでこれを行う場合、最後にmsbuildタスクを追加できますか? Visual Studio IDEに表示されていない別のマクロ値が見つからないかどうかだけを確認したい場合は、msbuildオプションを診断に切り替えると、使用できるすべての変数が表示されます。現在の値と同様。
Visual Studioでこれをオンにするには、[ツール/オプション]に移動し、[プロジェクトとソリューション]というセクションまでツリービューを下にスクロールして展開し、[ビルドと実行]をクリックします。出力の冗長性を構築し、それを診断に設定すると、使用できる他のマクロ値が表示されます。
私はあなたがどのレベルに行きたいか、そしてあなたがあなたのビルドをどれほど複雑にしたいかをよく知らないので、これはあなたにいくらかのアイデアを与えるかもしれません。最近、ビルドの一部としてSQLコードを実行するビルドスクリプトを実行しています。さらなるヘルプまたはサンプルのビルドスクリプトが必要な場合はお知らせください。ただし、ビルドの最後に実行する小さなプロセスである場合は、msbuildスクリプトを完全に実行するのは少しやり過ぎです。
希望 リハン