Подтвердить что ты не робот

Установка шрифта с помощью 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 не является шрифтом, а его версия не является ссылкой на сопутствующий файл. Он должен иметь язык, указанный в столбце Язык.

4b9b3361

Ответ 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>

работает хорошо - любой компонент должен иметь ссылку на каталог