我的项目是更大解决方案的一部分,已从 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
candle.exe
在 TFS 构建期间,这些参数都不会被传递。我认为这些信息可能有助于回答这个问题。
任何帮助是极大的赞赏!