Установка шрифта с помощью Wix не в локальную папку шрифтов
Я использую Wix для создания установки для веб-сайта.
При добавлении шрифта WiX берет расширение .ttf и требует установки его в локальную папку Font (при использовании Directory Id = "FontsFolder" и TrueType = "yes" ). Если вы удалите эти атрибуты, он упадет.
Есть ли способ заставить WiX устанавливать шрифты в пользовательскую папку (../Content/fonts/) без жалобы?
EDIT:
<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>
С приведенным выше кодом я получаю сообщение об ошибке:
error LGHT1076: ICE60: Файл font.ttf не является шрифтом, а его версия не является ссылкой на сопутствующий файл. Он должен иметь язык, указанный в столбце Язык.
Ответы
Ответ 1
После того, как проблема была поднята месяцами позже, нам удалось найти проблему:
Решение KeyPath было половиной ответа (см. ответ Alex). Без использования атрибута KeyPath в WiX решение ниже не будет работать.
Другая часть - это Оценщики внутренней согласованности (ICE), которые WiX запускает через Linker (light.exe) при упаковке MSI. Правило ICE ICE07 проверяет содержимое файлов, и если он определяет, что этот файл является шрифтом, он заставит файл в Windows/Fonts.
Чтобы остановить это, вам нужно отключить это правило при запуске light.exe. Для этого вы добавляете параметр -sice: после light.exe. Для нашего примера это будет:
light.exe -sice:ICE07
Вы можете отключить несколько правил, добавив дополнительные параметры -sice.
Ответ 2
Вы можете получить то же самое с VS:
Щелкните правой кнопкой мыши проект установки, нажмите "Свойства".
Выберите вкладку "Настройки инструмента".
В разделе проверки ICE вы можете запретить все предупреждения или конкретный ICEXX в этом случае
[ICE60]
ИЛИ
В том же TAB (Параметры инструмента) вы можете добавить дополнительные параметры компилятору или компоновщику. Итак, в разделе компоновщика просто добавьте
[- шестерка: ICE60]
Ответ 3
Для конкретного случая шрифта bootstrap glyphicons_halflings.ttf, который заходит в папку шрифтов веб-сайта по дизайну, это решение работает без предупреждения ICE07:
Поскольку вы также будете устанавливать соответствующие веб-сайты woff, eot и svg в одно и то же время, вы можете указать, что файл 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 и предоставляем ему сопутствующий файл, который является одним из других файлов шрифтов в Интернете. Все устанавливается там, где вы ожидаете, и не создается ICE07.
Ответ 4
<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>
работает хорошо - любой компонент должен иметь ссылку на каталог