这是cakebuild脚本:
WiXHeat(Directory("../Release"), new FilePath("./xxx/Files.wxs"), WiXHarvestType.Dir, new HeatSettings
{
AutogeneratedGuid = true,
ComponentGroupName = "Binaries",
Transform = "./Filter.xslt",
SuppressCom = true,
SuppressFragments = true,
SuppressRegistry = true,
SuppressRootDirectory = true,
PreprocessorVariable = "var.xxx.TargetDir",
DirectoryReferenceId = "INSTALLFOLDER",
WorkingDirectory = "./xxx_Installer",
KeepEmptyDirectories = true,
GenerateGuid = true,
});
它使用参数:-ke -ag -gg。
Files.wxs看起来像:
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="INSTALLFOLDER">
<Directory Id="dir76A8B56EDC1C4DD3CB4177F3704BC91E" Name="data">
<Component Id="cmpE375532277DA492834892BE47B02E5DA" Guid="*" KeyPath="yes">
<CreateFolder />
</Component>
</Directory>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="Binaries">
<ComponentRef Id="cmpE375532277DA492834892BE47B02E5DA" />
</ComponentGroup>
</Fragment>
</Wix>
然后Light不能与Files.wxs一起使用,这是错误:
... \ Files.wxs(29):错误LGHT0230:Component / @ Guid属性 值'*'对此组件无效,因为它不符合 拥有自动生成guid的标准。组件 使用Directory作为KeyPath或包含ODBCDataSource子 元素不能使用自动生成的guid。确保你的 组件没有KeyPath的目录并移动任何 ODBCDataSource子元素到具有显式组件的组件 的GUID。执行任务'BuildInstaller'时发生错误。错误: Light:进程返回错误(退出代码230)。
似乎对于空目录,它必须有一个指定的公会,而不是this article的“*”。
我不想手动用GUID替换“*”,因为热/光过程与构建过程集成,而Files.wxs在源代码控制中。
您知道如何解决此错误吗?
答案 0 :(得分:2)
您同时使用热参数-ag和-gg。
我错过了什么或
-ag - 在编译时自动生成组件guid,例如设置Guid =“*”。
-gg - 现在生成guid。当热量运行时,所有组件都有一个guid。
来源http://wixtoolset.org/documentation/manual/v3/overview/heat.html
不能同时满足。
因为你的灯光在GUID生成期间失败了,我建议只尝试 -gg 而不用 -ag 。这也帮助了我的空目录。
答案 1 :(得分:1)
我添加了这个片段,WiX Light工作正常。
<xsl:template match="wix:Directory[@Name='data']/wix:Component/@Guid">
<xsl:attribute name="Guid">
<xsl:value-of select="'E8A26678-FA90-4BFC-846F-4E79AE55D44D'"/>
</xsl:attribute>
</xsl:template>
如果这是正确的解决方案,请发表评论。