使用来自TFS构建的另一个解决方案的wixlibs

时间:2012-11-14 20:48:31

标签: tfs wix wixlib

我们有安装程序引用wixlib文件来获得一些常用功能。 wixlib构建在另一个解决方案中,然后移动到该解决方案中的文件夹。当我们尝试使用TFS构建构建安装程序时,我们从light.exe收到错误:

light.exe: The system cannot find the file '..\..\..\Core\Common\assemblies\v1.0\Common.Wix.wixlib' with type 'Source'.

我们的常规项目可以引用\ assembiles \ _v1.0,因为我们在那里存储了一些其他常见的程序集。我们如何在构建期间让WiX识别这个位置?

2 个答案:

答案 0 :(得分:2)

您正在直接引用wixlib。因此,据我所知,TFS构建过程应该添加到您的解决方案的TFS项目中。 TFS项目不应该依赖于另一个非依赖解决方案的输出。这至少是不好的做法。在任何情况下,您都无法保证在项目构建服务器之前会生成此输出。

据我记忆,TFS构建为每个构建创建单独的文件夹并在那里获取源。因此,您的解决方案不再位于相同的文件夹层次结构级别。

还有一点支持将wixlibs显式复制到安装程序项目中:版本控制 - 在这种情况下,公共库中的任何错误都不会立即破坏引用它的所有项目。您可以逐步升级和测试每个项目。你能想象在每次构建时自动下载任何第三方dll的新版本吗?即使更改对您不重要,该DLL中的任何更改都将立即中断您的应用程序。

答案 1 :(得分:0)

由于共享组件和活动解决方案位于TFS中的两个单独项目中,因此必须设置工作空间以使引用的相对路径保持不变。最简单的方法是在TFS Build中的Workspace中设置Build Agent Folder结构,让$(SourceDir)代表你的root。但是,请勿更改源控制文件夹 - 保持不变。

例如,假设您有以下结构:

-TFS
|-SharedComponents
||-MyComponents
|-ProjectArea
||-MyProject

您可能希望在构建工作区中包含以下两项:

Source Control Folder               Build Agent Folder
---------------------------------------------------------------------------------
$/ProjectArea/MyProject             $(SourceDir)\ProjectArea\MyProject
$/SharedComponents/MyComponents     $(SourceDir)\SharedComponents\MyComponents

这模仿了构建文件夹中TFS的结构,从而允许所有相对路径保持不变。

关于此配置的另一个注意事项:由于您在其他位置拥有共享组件,因此您可能希望在MyProject中创建解决方案文件夹并将正在使用的组件添加到其中。这将确保当任何人从TFS加载您的项目时它们会被自动拉出 - 他们不必在发现构建错误后单独返回并下拉共享组件文件夹。