2012-07-07 62 views
2

我在我的網站級聯樣式表中定義了一個@font-face。當我在本地瀏覽到站點時(由IIS Express提供服務),此字體加載正常。但是,從我的遠程服務器(IIS 7.5)加載我的應用程序時,對此字體的引用會導致internal server 500 error。爲什麼下面的樣式在本地工作,但不在服務器上?自定義字體在本地工作,但不在服務器上?

@font-face { 
    font-family: DejaVu Sans Mono; 
    src: url('../fonts/DejaVuSansMono.ttf'); 
} 

header h1 
{ 
    font-family: 'DejaVu Sans Mono'; 
    font-size: 3em; 
    padding: 0; 
    margin: 0; 
} 

回答

2

如果你檢查你會發現DejaVuSansMono.ttf文件沒有被複制到你的服務器。由於它沒有被複制,字體文件不在IIS 7.5中提供。它在本地工作,因爲IIS Express能夠在本地目錄中找到該文件。

默認情況下,Visual Studio無法識別的文件類型BuildAction Property設置爲;字體文件就是這樣一種無法識別的類型。讓BuildAction爲none意味着Visual Studio在構建應用程序時將忽略此文件。有幾個現成的選項爲BuildAction的屬性:

  • - 不包括項目輸出組中的文件,並在構建過程中未編譯。一個示例是 包含文檔的文本文件,如自述文件。
  • 編譯 - 文件被編譯到構建輸出中。此設置用於代碼文件。
  • 內容 - 該文件未編譯,但包含在內容輸出組中。例如,對於.htm或其他類型的Web文件,此設置是默認值 。
  • 嵌入式資源 - 該文件作爲DLL或可執行文件嵌入在主項目構建輸出中。它通常用於資源 文件。

最合適的BuildAction的屬性設置爲DejaVuSansMono.ttf內容。通過這種方式設置BuildAction,文件將被複制到遠程服務器。不幸的是,這個手動過程將不得不爲每個文件重複一個無法識別的文件類型,這爲開發人員提供了一個單調乏味的容易出錯的過程。值得慶幸的是,Andre Loker在setting the default build action for non-default file-types in Visual Studio上發表了一篇很棒的博文。