我正在使用最新的奉献(Wix v3.5)并创建了一个简单的Wix VS 2010安装项目.我添加了我的网站参考并将Harvest选项设置为true.
既然我INSTALLDIR指向IISROOT下的文件夹,我得到这个light.exe错误:
[filepath]:错误LGHT0231:组件'cmp93982C4086FF8C75F07339DD7CEA8152'的密钥文件路径为'TARGETDIR\webdir ... [filename] .xml'.由于此路径不是以其中一个标准目录(如ProgramFilesFolder)为根,因此该组件不符合自动生成guid的条件.(如果路径包含可能的标准目录,例如在ProgramFilesFolder下嵌套名为"Common Files"的目录,也可能发生此错误.)
虽然我理解这个错误背后的原因,但我不一定同意它的理性(也许我不理解Wix MSI一代的固有工作原理).
我该如何解决这个错误?
提供一些背景信息:
我正在尝试与Team Build一起设置它.我可以使用旧格式并对文件夹运行Heat/Harvest任务来绕过此问题,但不想使用旧版路由.
我没有使用基于工作流的新构建定义,因此不确定如何合并此自定义任务.
每次构建安装项目时我都需要运行收获,因为我不想手动跟踪数百个文件.
我在自己的guid中使用自动guids,<Product>但无法弄清楚如何使用它们<Module>.我只收到这个错误:
组件X有一个密钥文件,路径为'TARGETDIR\company ...'.由于此路径未植根于其中一个标准目录(如ProgramFiles文件夹),因此该组件不符合自动生成guid的条件.
上面company是映射到的值!(loc.ProductManufacturerFolderName).
唯一的问题是这不是真的.我的目录根植于ProgramFiles,就像我的产品一样,我的产品工作正常:
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFiles64Folder">
<Directory Id="MODULEINSTALLLOCATION" Name="!(loc.ProductManufacturerFolderName)">
<Directory Id="Data" Name="Data">
Run Code Online (Sandbox Code Playgroud)
我的所有组件声明看起来大致如下:
<Component Id="DocumentationParty_Business_TestCases_v1xlsx.component" Guid="{YOURGUID-1234-1234-84B3-C595A63428AD}" MultiInstance="yes">
<File Source="../../Development/Integration/SSIS/Documentation/Party_Business_Test Cases_v1.xlsx" KeyPath="yes" Id="DocumentationParty_Business_TestCases_v1xlsx.file" />
</Component>
Run Code Online (Sandbox Code Playgroud)
打破它很容易,你只需要更改GUID *和上面的错误结果.这已破了:
<Component Id="DocumentationParty_Business_TestCases_v1xlsx.component" Guid="*" MultiInstance="yes">
<File Source="../../Development/ClaimsIntegration/SSIS/Documentation/Party_Business_Test Cases_v1.xlsx" KeyPath="yes" Id="DocumentationParty_Business_TestCases_v1xlsx.file" />
</Component>
Run Code Online (Sandbox Code Playgroud)
我有一个.wxs文件,用于安装组件的每个目录.我的所有组件持有.wxs文件具有以下结构:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<ComponentGroup Id="DatabasePolicy_Files">
<ComponentRef Id="DatabasePolicyCreateDatabasecmdtemplate.component" />
</ComponentGroup>
<DirectoryRef Id="DataPolicy">
<Component Id="DatabasePolicyCreateDatabasecmdtemplate.component" Guid="*" MultiInstance="yes">
<File Source="../../Development/Database/Policy/CreateDatabase.cmd.template" KeyPath="yes" Id="DatabasePolicyCreateDatabasecmdtemplate.file" />
</Component>
</DirectoryRef>
</Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)
每个<ComponentGroup>都包含在我的主.wxs文件中<ComponentGroupRef>.这适用于我所有的MSI项目,只有在我开始使用合并模块时才会中断.此外,我已经尝试注释掉除了与上述定义匹配的所有组件,它仍然会在同一错误上中断. …