3

我们有安装程序引用一个 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 在构建过程中识别这个位置?

4

2 回答 2

2

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

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

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

于 2012-11-19T12:07:00.580 回答
0

由于共享组件和活动解决方案位于 TFS 中的两个独立项目中,因此必须设置工作区以使引用的相对路径保持不变。最简单的方法是在 TFS 构建的工作区中设置构建代理文件夹结构,以使 $(SourceDir) 代表您的根目录。但是,不要更改您的源代码管理文件夹 - 保持不变。

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

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

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

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

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

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

于 2012-11-30T17:45:38.680 回答