【发布时间】:2013-04-17 21:02:43
【问题描述】:
作为更大解决方案一部分的我的项目已从 dbproj 转换为 asqlproj (SSDT)。该解决方案包括一个引用 SSDT 项目的 WiX 安装程序。 WiX 项目通过 VS2010 在多个开发者系统上构建良好。然而,我们一直使用的自动化构建失败并出现以下错误:
error CNDL0150: Undefined preprocessor variable '$(var.DatabaseProject.TargetDir)'.
在转换此项目之前,该解决方案已由 TFS 自动构建构建了数月,没有出现任何问题。我可以从构建日志中看到 SSDT 项目正在构建中,以下是构建日志中的一些相关行:
Project "C:\B\1\SourcePath\Server\Server.wixproj" (8) is building "C:\B\1\SourcePath\Database\DatabaseProject.sqlproj" (12) on node 1 (default targets).
...
Done Building Project "C:\B\1\SourcePath\Database\DatabaseProject.sqlproj" (default targets).
我还可以看到数据库项目的 .dacpac 和 .dll 文件已创建并复制到 TFS 构建已将项目重定向到的输出目录中。
对数据库项目的引用似乎很好,TFS 构建似乎知道应该构建它,但 WiX 抱怨 TargetDir 的未定义预处理器变量。
我一定是遗漏了什么... TFS 使用的输出重定向是否会导致我的问题?我不知道从哪里开始,感谢您提出的任何帮助。
更多信息
更详细地查看构建的日志文件,我可以看到.sqlproj 项目的参数没有通过命令行传递给candle.exe。当我在VS2010本地构建时,可以看到传递的预期参数如下(就像WiX项目引用的其他项目一样):
-d"DatabaseProject.FullConfiguration=Release|AnyCPU"
-dDatabaseProject.Platform=AnyCPU
-dDatabaseProject.ProjectDir=C:\SourcePath\Database\
-dDatabaseProject.ProjectExt=.sqlproj
-dDatabaseProject.ProjectFileName=DatabaseProject.sqlproj
-dDatabaseProject.ProjectName=DatabaseProject
-dDatabaseProject.ProjectPath=C:\SourcePath\Database\DatabaseProject.sqlproj
-dDatabaseProject.TargetDir=C:\SourcePath\Database\sql\release\
-dDatabaseProject.TargetExt=.dll
-dDatabaseProject.TargetFileName=DatabaseProject.dll
-dDatabaseProject.TargetName=DatabaseProject
-dDatabaseProject.TargetPath=C:\SourcePath\Database\sql\release\DatabaseProject.dll
在 TFS 构建期间,这些参数均未传递给 candle.exe。我认为这些信息可能有助于回答问题。
非常感谢任何帮助!
【问题讨论】:
-
我的设置几乎完全相同,它在 TFS 上运行良好。我能看到的唯一区别是我们使用的是 VS/TFS2012。我还记得必须从头开始重新创建 sqlproj,而不是进行升级,但不记得为什么。
-
@caveman_dick 感谢您的评论...我尝试从头开始重新创建项目,但仍然无法使用预处理器变量构建 WiX 项目。也许与 2012 年不同...
标签: wix tfsbuild sql-server-data-tools