【发布时间】:2014-03-25 00:47:29
【问题描述】:
背景
在 Visual Studio 2013 中,针对 TFS 2012 实例,我的解决方案中有 2 个项目:
- .sqlproj 数据库项目(“项目 D”)。该项目输出一个 .dll 和一个 .dacpac 文件。
- 一个 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”,因为没有找到。
我尝试过的事情(不成功)
类似的问题,如this 和this,有不同的原因,并不能帮助我解决问题。
解决方案:
- control the folder structure of the binaries output folder,或
- 将解决方案构建的所有输出合并到一个文件夹中
仍然失败,因为在任何情况下,项目 D 的构建输出(包括 .dacpac 文件)都放置在放置文件夹中构建代理的文件夹下方,而项目 W 的链接文件引用是期望 .dacpac 文件位于构建代理的映射工作空间内 项目 D 的源文件下方 的文件夹中,相对于项目 W(即“..\ProjectD\bin\debug\ProjectD.dacpac” .) (为准确而编辑的段落。)
问题
如何在这个特定场景中配置我的解决方案/项目,以便它们在 Visual Studio 和 TFS Build 中都可以工作?
(在我看来,理想的情况是,如果有某种特殊的“项目引用”可以获取引用项目的所有输出,而不仅仅是 .dll。)
【问题讨论】:
-
为什么你有一个引用 dacpac 的项目?这不是团队通常会做的事情。
-
@DylanSmith,WPF 项目在 .Net 进程中执行 SqlPackage.exe,在 /SourceFile: 参数中使用了 .dacpac 文件。如果您对更好的方法有建议,我会全力以赴。
标签: tfs visual-studio-2013 tfsbuild database-project dacpac