【问题标题】:In TFS Build, project build fails because linked file from a referenced project's output is not found在 TFS 构建中,项目构建失败,因为未找到来自引用项目输出的链接文件
【发布时间】:2014-03-25 00:47:29
【问题描述】:

背景

在 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. control the folder structure of the binaries output folder,或
  2. 将解决方案构建的所有输出合并到一个文件夹中

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

问题

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

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

【问题讨论】:

  • 为什么你有一个引用 dacpac 的项目?这不是团队通常会做的事情。
  • @DylanSmith,WPF 项目在 .Net 进程中执行 SqlPackage.exe,在 /SourceFile: 参数中使用了 .dacpac 文件。如果您对更好的方法有建议,我会全力以赴。
  • 也许这可以帮助你:social.msdn.microsoft.com/Forums/en-US/…

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


【解决方案1】:

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

【讨论】:

  • 我实际上并没有实现这一点,因为在发布我的问题几天后,我的公司升级到了 TFS 2013,所以我能够以更简单的方式实现我的目标。我将此答案标记为已接受,因为它为我指明了正确的方向,并且我正在使用他的建议在 TFS 2012 中解决问题。
【解决方案2】:

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

【讨论】:

  • SqlPackage.exe 在构建期间未调用。它在运行时由客户端站点上运行的 WPF 应用程序调用,以使用 .dacpac 文件创建数据库。这就是为什么 .dacpac 文件需要包含在 WPF 应用程序的构建输出中
  • 在这种情况下,当您打包 WPF 应用程序时,只需将 dacpac 复制到包中即可。如果您只是 xcopy 部署,请确保从构建输出中复制 dacpac,以及您的 WPF 应用程序。我通常有一个我从 TFSBuild 调用的 powershell 脚本,它将我需要的所有文件集中到一个包中以进行部署。
  • 如果您将前面的评论添加为答案,我会将其标记为已接受。由于我在第一条评论中说明的原因,我无法将答案本身标记为已接受。
猜你喜欢
  • 2021-11-25
  • 2019-06-25
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2018-04-01
  • 2019-10-13
相关资源
最近更新 更多