2011-09-07 67 views
9

我正在使用最新votive(Wix v3.5)并创建了一个简单的Wix VS 2010安装项目。我添加了我的网站参考,并将Harvest选项设置为true收割文件导致LGHT0231错误

现在,因为我INSTALLDIR点IISROOT下一个文件夹中,我得到这个light.exe错误:

[filepath]: error LGHT0231: The component 'cmp93982C4086FF8C75F07339DD7CEA8152' has a key file with path 'TARGETDIR\webdir...[filename].xml'. Since this path is not rooted in one of the standard directories (like ProgramFilesFolder), this component does not fit the criteria for having an automatically generated guid. (This error may also occur if a path contains a likely standard directory such as nesting a directory with name "Common Files" under ProgramFilesFolder.)

虽然我知道这个错误背后的原因,我不一定同意其合理的(也许我不明白Wix MSI一代的天生作用)。

如何解决此错误?


提供一些背景:

我试图与团队建设结合进行此设置。我可以使用传统格式并针对文件夹运行Heat/Harvest任务来绕过此问题,但不希望执行传统路由。

我还没有发挥足够的基于新的基于工作流的构建定义,所以不知道如何可以纳入这个自定义任务。

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

+0

我有同样的问题;我试图将C:\ Inetpub \ wwwroot \ MyProject \设置为默认安装位置,但WiX不会听到它。 –

+0

你有没有找到一些解决方法?谢谢 –

+0

@SanjaMelnichuk:不幸的不是。当我转移到其他项目时,我还没有在那里投入更多时间,但我想我想在那里做什么需要一些XAML知识和熟悉TFS工作流程。 – Mrchief

回答

9

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

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

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

+0

直到我编写另一个Wix项目时,我再次遇到了这个问题,然后我想起了您的解决方案。对不起,花了我很长时间才接受它! :) – Mrchief