単一のTFSソリューション(シェル、comonライブラリ、2つのモジュール、およびいくつかのテストプロジェクト)にPRISMアプリがあります。簡単にするために、DirectoryModuleCatalogを選択し、ビルド後にアプリをローカルで実行するために、コピーしたモジュールプロジェクトビルドにビルド後の手順を追加しました。 GUIアプリの出力パスのmodulesサブフォルダーへのビルドdll。
これはローカルクライアントビルドでは問題なく機能しますが、同じポストビルドイベントがTFSビルドエージェントからトリガーされると失敗します。検査では、これは、ローカルで相対パスである$(OutDir)マクロが、TFSビルドエージェントのMSBuildログの絶対パスであるためです。
MSDNを引用するには
$(OutDir)
Path to the output file directory, relative to the project directory.
This resolves to the value for the Output Directory property.
It includes the trailing backslash '\'.
ローカルでは、これはビルドエージェントの「bin \ Debug」に解決され、「C:\ Builds \ 5 \ XXXX \ Gui.DEV_XXXX7_Iteration0.CI \Binaries\」に解決されます。
この元のローカルのビルド後の定義を考えると、
mkdir "$(SolutionDir)Gui\$(OutDir)Modules\"
copy "$(TargetPath)" "$(SolutionDir)Gui\$(OutDir)Modules\"
次のようなビルドエージェントで失敗する理由がわかります。
mkdir "C:\Builds\4\XXXX\Gui.DEV_Cortex7_Iteration0.CI\Sources\Gui\C:\Builds\4 \XXXX\Gui.DEV_XXXX7_Iteration0.CI\Binaries\Modules\"
copy "C:\Builds\4\XXXX\Gui.DEV_XXXX7_Iteration0.CI\Binaries\Apdcomms.Cortex.Gui.Example2.Module.dll"
"C:\Builds\4\XXXX\Gui.DEV_XXXX7_Iteration0.CI\Sources\Gui\C:\Builds\4\XXXX\Gui.DEV_XXXX7_Iteration0.CI\Binaries\Modules\"
The filename, directory name, or volume label syntax is incorrect.
The filename, directory name, or volume label syntax is incorrect.
0 file(s) copied.
そのため、マクロの値を確認すると、TFSビルドエージェントでローカルモードのコマンドとは異なるコマンドのセットがポストビルドで必要になるように見えますが、これはかなり厄介です。
SO to the qestion:loclaクライアントビルドとTFSチームビルドで機能する方法で、ソリューション内の1つのプロジェクトのバイナリ出力を同じソリューション内の別のプロジェクトのサブフォルダーに移動するにはどうすればよいですか?