2012-10-24 21 views
17

Używam Wix do stworzenia instalacji na stronie internetowej.Instalowanie czcionki za pomocą Wix nie do lokalnego folderu czcionek

Dodając czcionkę, WiX odbiera na rozszerzeniu .ttf i wymaga zainstalowania go w lokalnym folderze czcionek (przy użyciu identyfikatora katalogu = "FontsFolder" i TrueType = "yes"). Jeśli usuniesz te atrybuty, to się przewróci.

Czy istnieje sposób na przekonanie WiX do zainstalowania czcionek w folderze niestandardowym (../Content/fonts/) bez narzekania?

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> 

Z powyższego kodu, pojawia się błąd:

błąd LGHT1076: ICE60: Plik font.ttf nie jest czcionki, a jego wersja nie jest plikiem towarzysz odniesienie. Powinien mieć język określony w kolumnie Język.

Odpowiedz

11

po wydaniu powstawszy miesięcy później udało nam się znaleźć problem:

Rozwiązanie KeyPath była połowa odpowiedzi (patrz Alexa Odpowiedź). Bez użycia atrybutu KeyPath w WiX poniższe rozwiązanie nie będzie działać.

Druga część to Wewnętrzne oceny spójności (ICE), które WiX wykonuje poprzez Linker (light.exe) podczas pakowania MSI. Reguła ICE ICE07 sprawdza zawartość plików, a jeśli ustali, że plik jest czcionką, wymusi plik w Windows/Fonts.

Aby temu zapobiec, musisz wyłączyć tę regułę, gdy uruchomi się plik light.exe. Aby to zrobić, należy dodać parametr -sice: after light.exe. Dla naszego przykładu będzie to:

light.exe -sice:ICE07 

Możesz wyłączyć wiele reguł, dodając więcej parametrów.

+0

Miałem ten sam problem z plikami .DLL; wyłączenie ICE07 niczego nie zmieniło, ale wyłączenie ICE60 zatrzymało ostrzeżenie. –

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> 

działa dobrze - każdy składnik powinien mieć odniesienie do katalogu

+0

Program KeyPath nie działa. Załączam mój kod do pytania i komunikat o błędzie, który otrzymałem. – Kyzou

5

Można acheive samo z VS:

prawym przyciskiem myszy na projekt Setup, kliknij przycisk Właściwości.

Wybierz zakładkę Ustawienia narzędzi.

W sekcji walidacji ICE można tłumić wszelkie ostrzeżenia lub konkretny jeden ICEXX, w tym przypadku

[ICE60]

LUB

Na tej samej karcie (Ustawienia narzędzia), możesz dodać dodatkowe parametry do kompilatora lub linkera. Tak więc, w sekcji łącznikowej wystarczy dodać

[-sice: ICE60]

4

Dla konkretnego przypadku bootstrapowych glyphicons_halflings.ttf czcionki, która spada do folderu czcionek na stronie internetowej przy projektowaniu to rozwiązanie działa bez tłumiąc ostrzeżenia ICE07:

Ponieważ będzie również zainstalowanie dopasowanie WOFF, EOT i Czcionki Webfonts SVG w tym samym czasie, można Określa, że ​​plik TTF ma plik towarzyszący i nie jest czcionką TrueType.

Jeśli naiwnie po prostu stworzyć fragment WiX Aby dodać pliki czcionek niziołki do witryn Fonts tak: (Wymień częściowe GUID jest to konieczne)

<?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> 

doda pliki do poprawnej lokalizacji, ale budowanie rozwiązania spowoduje wygenerowanie ostrzeżenia o walidacji ICE07, żałując, że plik czcionki TTF musi przejść w folderze czcionek systemu Windows.

Biorąc pod uwagę, że jest to czcionka internetowa i nie powinna tam być, to bardzo denerwujące, ale na szczęście, ponieważ jest to czcionka internetowa, potrzebujesz jej w wielu formatach, aby zaspokoić IE, Edge, Chrome, Firefox itp. oznacza, że ​​możesz użyć obecności wariantów czcionek bez TTF, aby wyeliminować ostrzeżenie.

Refactor fragment tak:

<?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> 

Tu zaprzeczyć jego czcionkę TTF i dostarczyć go z plikiem towarzysz, który jest jednym z pozostałych plików czcionek WWW. Wszystko instaluje się tam, gdzie oczekujesz i nie produkuje się ICE07.

+0

Podoba mi się to, ponieważ nie wymaga wyłączenia ostrzeżeń. Dziękuję Ci! –

Powiązane problemy