在TFS Build中,项目构建失败,因为找不到引用项目输出中的链接文件

时间:2014-03-18 15:05:45

标签: tfs visual-studio-2013 tfsbuild database-project dacpac

背景

在Visual Studio 2013中,针对TFS 2012实例,我的解决方案中有2个项目:

  1. .sqlproj数据库项目("项目D")。该项目输出.dll和.dacpac文件。
  2. 一个WPF项目("项目W"),它包含对数据库项目的项目引用。
  3. 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"因为没找到。

    我尝试的事情(未成功)

    类似的问题,例如thisthis,有不同的原因,并且无法帮助我解决问题。

    解决方案:

    1. control the folder structure of the binaries output folder
    2. 将解决方案构建的所有输出合并到一个文件夹中
    3. 仍然失败,因为在每种情况下,Project D的构建输出(包括.dacpac文件)都放在drop文件夹中的构建代理程序文件夹下面的 ,而项目W的链接文件引用期望.dacpac文件位于构建代理的映射工作空间中项目D的源文件下的文件夹中,相对到项目W(即" .. \ ProjectD \ bin \ debug \ ProjectD.dacpac"。)(为准确性而编辑的段落。)

      问题

      如何在此特定方案中配置我的解决方案/项目,以便它们在Visual Studio和TFS Build中都可以工作?

      (在我看来,理想的情况是,如果有一些特殊的"项目引用"它将获取引用项目的所有输出,而不仅仅是.dll。)

2 个答案:

答案 0 :(得分:2)

当您打包WPF应用程序时,只需将dacpac复制到包中即可。如果您只是xcopy部署,请确保除了WPF应用程序之外,还要从构建输出中复制dacpac。我通常有一个我从TFSBuild调用的powershell脚本,它将我需要的所有文件整合到一个包中进行部署。

答案 1 :(得分:0)

让执行SqlPackage的构建任务使用$(OutputPath)变量来定位dacpac文件。 TfsBuild会覆盖此MSBuild变量,以指示项目放置输出的位置。