1

背景

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

  1. .sqlproj 数据库项目(“项目 D”)。该项目输出一个 .dll 和一个 .dacpac 文件。
  2. 包含对数据库项目的项目引用的 WPF 项目(“项目 W”)。

项目 W 的构建输出文件夹必须包含来自项目 D 的 .dll 和 .dacpac 文件——除了它自己的 .exe。正如预期的那样,项目引用只会将项目 D 中的 .dll 复制到项目 W 的输出文件夹中。为了也获得 .dacpac 文件,我在项目 W 中包含一个链接文件引用,指向来自项目 D 输出的 .dacpac 文件。

问题

这在 Visual Studio 中运行良好,但在 TFS 构建中失败,并出现以下错误:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets (3686):无法复制文件“d:\TfsBuilds\2\...\ProjectD\bin\debug\ProjectD.dacpac “因为没有找到。

我尝试过的事情(不成功)

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

解决方案:

  1. 控制二进制输出文件夹的文件夹结构,或
  2. 将解决方案构建的所有输出合并到一个文件夹中

仍然失败,因为在每种情况下,项目 D 的构建输出(包括 .dacpac 文件)都被放置在构建代理的文件夹下在放置文件夹中,而项目 W 的链接文件引用期望 .dacpac 文件位于文件夹中在项目 D 的源文件下在构建代理的映射工作空间内,相对于项目 W(即“..\ProjectD\bin\debug\ProjectD.dacpac”。)(为准确而编辑的段落。)

问题

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

(在我看来,理想的情况是如果有某种特殊的“项目引用”可以获取引用项目的所有输出,而不仅仅是 .dll。)

4

2 回答 2

2

打包 WPF 应用程序时,只需将 dacpac 复制到包中。如果您只是 xcopy 部署,请确保从构建输出中复制 dacpac,以及您的 WPF 应用程序。我通常有一个我从 TFSBuild 调用的 powershell 脚本,它将我需要的所有文件汇集到一个包中以进行部署。

于 2014-03-24T16:47:29.783 回答
0

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

于 2014-03-18T16:38:16.390 回答