在Visual Studio 2013中,针对TFS 2012实例,我的解决方案中有2个项目:
Project W的构建输出文件夹必须包含Project D中的.dll和.dacpac文件 - 以及它自己的.exe。正如预期的那样,项目引用只会将项目D中的.dll复制到Project W的输出文件夹中。为了获取.dacpac文件,我将Project W中的链接文件引用包含在Project D的输出中的.dacpac文件中。
这在Visual Studio中运行良好,但在TFS构建中失败,出现以下错误:
C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Microsoft.Common.targets(3686):无法复制文件" d:\ TfsBuilds \ 2 \ ... \ ProjectD \ BIN \调试\ ProjectD.dacpac"因为没找到。
类似的问题,例如this和this,有不同的原因,并且无法帮助我解决问题。
解决方案:
仍然失败,因为在每种情况下,Project D的构建输出(包括.dacpac文件)都放在drop文件夹中的构建代理程序文件夹下面的 ,而项目W的链接文件引用期望.dacpac文件位于构建代理的映射工作空间中项目D的源文件下的文件夹中,相对到项目W(即" .. \ ProjectD \ bin \ debug \ ProjectD.dacpac"。)(为准确性而编辑的段落。)
如何在此特定方案中配置我的解决方案/项目,以便它们在Visual Studio和TFS Build中都可以工作?
(在我看来,理想的情况是,如果有一些特殊的"项目引用"它将获取引用项目的所有输出,而不仅仅是.dll。)
答案 0 :(得分:2)
当您打包WPF应用程序时,只需将dacpac复制到包中即可。如果您只是xcopy部署,请确保除了WPF应用程序之外,还要从构建输出中复制dacpac。我通常有一个我从TFSBuild调用的powershell脚本,它将我需要的所有文件整合到一个包中进行部署。
答案 1 :(得分:0)
让执行SqlPackage的构建任务使用$(OutputPath)变量来定位dacpac文件。 TfsBuild会覆盖此MSBuild变量,以指示项目放置输出的位置。