引用TFS Build和Visual Studio的构建输出的问题

时间:2010-05-07 14:03:42

标签: visual-studio tfs wix tfsbuild

这是我正在尝试做的事情:我有两个解决方案 - 一个用于我的主应用程序及其相关项目,另一个用于我的数据库(VS .dbproj)及其相关项目。我想要做的是在我的WiX安装程序(存在于主应用程序解决方案中)中包含数据库项目的输出(.dbschema和一些SQL脚本)。这涉及让TFS在主要应用程序解决方案之前立即构建数据库解决方案。应用解决方案我已经让这部分工作正常了,但我无法从安装程序中引用数据库解决方案的输出。

我正在使用相对路径来引用我的WiX安装程序中的数据库项目输出(例如<?define DBProjectOutputDir = "..\..\MyDatabaseSolution\MyDatabaseProject\sql\"?>),这在本地工作正常,但在通过TFS构建构建时失败。这是因为TFS Build显然将每个项目的输出目录更改为一个公共位置。而不是我的数据库项目的路径..\..\MyDatabaseSolution\MyDatabaseProject\sql\就像在本地构建时一样,它被设置为类似..\..\..\Binaries\Release\的东西。如何解决这个问题,并从我的安装程序项目中获取一致的输出位置?我正在使用TFS 2005,VS 2008和WiX 3.0。

2 个答案:

答案 0 :(得分:0)

如果在VS中的wix项目中添加引用(对数据库应用程序),则可以使用以下变量而不是相对路径,它将指向当前在配置中选择了哪个构建文件夹。 / p>

$(var.MyDatabaseProject.TargetDir)

Here is a good reference

答案 1 :(得分:0)

在对WiX邮件列表进行了大量挖掘之后,我发现您可以使用$(var.TargetDir)来引用当前的安装程序项目输出目录。因为只有在TFS Build中,所有项目的输出都放在一个目录中,所以我能够通过查看ComputerName环境变量为构建服务器创建一个特例:

<?if $(env.ComputerName) = "MYBUILDSERVER"?>
  <?define DBProjectOutputDir = "$(var.TargetDir)"?>
<?else?>
  <?define DBProjectOutputDir = "..\..\MyDatabaseSolution\MyDatabaseProject\sql\"?>
<?endif?>

这样,DBProjectOutputDir始终指向正确的目录。这是一个解决方法,所以我仍然在寻找更好的方法。