收集文件会导致LGHT0231错误

时间:2011-09-07 04:05:46

标签: wix wix3.5 votive

我正在使用最新的奉献(Wix v3.5)并创建了一个简单的Wix VS 2010安装项目。我添加了我的网站参考,并将Harvest选项设置为true

现在,由于我的INSTALLDIR指向IISROOT下的文件夹,我收到此light.exe错误:

  

[filepath]:错误LGHT0231:组件   'cmp93982C4086FF8C75F07339DD7CEA8152'有一个带路径的密钥文件   'TARGETDIR \ WEBDIR ... [文件名]的.xml'。由于此路径未植根   在其中一个标准目录(如ProgramFilesFolder)中,这个   组件不符合自动生成的标准   生成guid。 (如果路径包含a,也可能发生此错误   可能的标准目录,例如使用名称嵌套目录   ProgramFilesFolder下的“Common Files”。)

虽然我理解这个错误背后的原因,但我不一定同意它的理性(也许我不理解Wix MSI一代的固有工作方式)。

如何解决此错误?


提供一些背景信息:

我正在尝试与Team Build一起设置它。我可以使用旧格式并对文件夹运行Heat / Harvest任务来绕过此问题,但不想使用传统路由。

我没有使用基于工作流的新构建定义,因此不确定如何合并此自定义任务。

每次构建安装项目时我都需要运行收获,因为我不想手动跟踪数百个文件。

1 个答案:

答案 0 :(得分:10)

问题是因为该组件植根于TARGETDIR,而WiX无法用于自动生成guid。您可以将Directory/@ComponentGuidGenerationSeed添加到此组件上方的目录中以避免此问题。通过添加此属性,您现在必须负责确保组件不会在升级时安装到两个不同的目录。

在Windows Installer中,组件需要具有在修补程序,次要升级和主要升级之间不会更改的guid。为方便起见,WiX可以使用组件的目录层次结构作为种子为您生成version 5 UUID。但是,TARGETDIR不符合此条件。

我认为原因是TARGETDIR在各个安装中发生了变化(它被设置为具有最多可用空间的驱动器)。其中一个组件规则是“each component must be stored in a single folder”。如果主要升级之间发生TARGETDIR更改,那么您最终可能会尝试将同一组件安装到第二个文件夹中。