我在单个 TFS 解决方案(shell、comon 库、两个模块和几个测试项目)中有一个 PRISM 应用程序。为了简单起见,我选择了 DirectoryModuleCatalog 并且为了在构建后在本地运行应用程序,向复制的模块项目构建添加了一个后期构建步骤构建 dll 到 GUI 应用程序输出路径的模块子文件夹。
这在本地客户端构建上工作得很好,但是当从 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 构建代理下构建与在本地模式下构建时,我似乎需要在 postbuild 中使用一组不同的命令,这非常糟糕。
所以问题是:如何以适用于 locla 客户端构建和 TFS 团队构建的方式将解决方案中一个项目的二进制输出移动到同一解决方案中另一个项目的子文件夹?