我正在使用Wix为网站创建安装。
添加字体时,WiX会选择.ttf扩展名,并要求您将其安装到本地Font文件夹中(当使用Directory Id =“FontsFolder”和TrueType =“yes”时)。如果删除这些属性,它就会失败。
有没有办法让WiX将字体安装到自定义文件夹(../Content/fonts/)而不抱怨?
编辑:
<Directory Id="dirFontsFolder" Name="fonts">
<Component Id="cfont.ttf" Guid="BDEBACC8-D057-4406-87B9-B310BA6DFE27">
<File Id="font.ttf" Source="$(var.SrcWebsite)\Content\fonts\font.ttf" KeyPath="yes" />
</Component>
</Directory>
使用上面的代码,我收到错误:
错误LGHT1076:ICE60:文件font.ttf不是Font,其版本不是伴随文件引用。它应该具有语言列中指定的语言。
答案 0 :(得分:12)
几个月后问题被提出后,我们设法找到了问题:
KeyPath解决方案是答案的一半(参见Alex的答案)。如果不使用WiX中的KeyPath属性,以下解决方案将无效。
另一部分是WiX在打包MSI时通过Linker(light.exe)运行的内部一致性评估程序(ICE)。 ICE规则ICE07,检查文件的内容,如果确定该文件是字体,将强制该文件在Windows / Fonts中。
要阻止这种情况发生,您需要在light.exe运行时禁用此规则。为此,请在light.exe之后添加-sice:参数。对于我们的例子,它将是:
light.exe -sice:ICE07
您可以通过添加更多-sice参数来禁用多个规则。
答案 1 :(得分:5)
你可以用VS实现同样的目的:
右键单击“安装项目”,单击“属性”。
选择工具设置标签。
在ICE验证部分,您可以取消所有警告,或在这种情况下禁用特定的ICEXX
[ICE60]
OR
在相同的TAB(工具设置)上,您可以向编译器或链接器添加其他参数。因此,在链接器部分中添加
[ - SICE:ICE60]
答案 2 :(得分:4)
对于 bootstrap glyphicons_halflings.ttf 字体的特定情况,该字体通过设计进入网站的fonts文件夹,此解决方案无需支持ICE07警告:
因为您还将同时安装匹配的woff,eot和svg webfonts,您可以指定TTF文件具有伴随文件而不是TrueType字体。
如果您天真地创建一个WiX片段,将Halflings字体文件添加到您的网站字体文件夹,如下所示:(根据需要替换部分GUID)
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="WebsiteFontsDir">
<Component Id="CMP_WebsiteFonts" Guid="{********-482C-4924-B06E-9FAC34F89D1D}" KeyPath="yes">
<File Id="glyphicons_halflings_regular.eot" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.eot" />
<File Id="glyphicons_halflings_regular.svg" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.svg" />
<File Id="glyphicons_halflings_regular.woff" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.woff" />
</Component>
<Component Id="CMP_WebsiteFonts2" Guid="{********-BFFE-441D-B8F4-156DD596B09F}" KeyPath="yes">
<File Id="glyphicons_halflings_regular.ttf" Source="$(var.ViewerModule.TargetDir)Police\fonts\glyphicons-halflings-regular.ttf" DefaultVersion="1.001" TrueType="yes" />
</Component>
</DirectoryRef>
</Fragment>
它会将文件添加到正确的位置,但构建解决方案会产生 ICE07 验证警告,警告TTF字体文件必须放在Windows Font文件夹中。
鉴于这是一个网络字体并且不应该去那里非常烦人,但幸运的是因为它是一种网络字体,你需要它以多种格式来安抚IE,Edge,Chrome,Firefox等......这意味着您可以使用非TTF字体变体的存在来消除警告。
像这样重构片段:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="WebsiteFontsDir">
<Component Id="CMP_WebsiteFonts" Guid="{********-482C-4924-B06E-9FAC34F89D1D}" KeyPath="yes">
<File Id="glyphicons_halflings_regular.eot" Source="$(var.AZViewerModule.TargetDir)fonts\glyphicons-halflings-regular.eot" />
<File Id="glyphicons_halflings_regular.svg" Source="$(var.AZViewerModule.TargetDir)fonts\glyphicons-halflings-regular.svg" />
<File Id="glyphicons_halflings_regular.woff" Source="$(var.AZViewerModule.TargetDir)fonts\glyphicons-halflings-regular.woff" />
</Component>
<Component Id="CMP_WebsiteFonts2" Guid="{********-BFFE-441D-B8F4-156DD596B09F}">
<File Id="glyphicons_halflings_regular.ttf"
Source="$(var.ViewerModule.TargetDir)fonts\glyphicons-halflings-regular.ttf"
TrueType="no"
KeyPath="no"
CompanionFile="glyphicons_halflings_regular.eot"/>
</Component>
</DirectoryRef>
</Fragment>
</Wix>
这里我们拒绝它的TTF字体,并为它提供一个伴随文件,这是其他Web字体文件之一。一切都安装在您期望的地方,不会产生ICE07。
答案 3 :(得分:2)
<Directory Id="WixWorkshop" Name="WixWorkshop">
<Component Id="Component1" Guid="DE1705EF-B96A-4746-AA9F-2C9D598E7D08">
<File Id="File1" Name="arial.ttf" Source="arial.ttf" KeyPath="yes"/>
</Component>
</Directory>
效果很好 - 任何组件都应该引用目录