自定义字体在本地工作但不在服务器上?

时间:2012-07-07 02:01:35

标签: css asp.net-mvc iis font-face true-type-fonts

我在网站的级联样式表中定义了@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;
}

1 个答案:

答案 0 :(得分:2)

如果您检查,您会发现DejaVuSansMono.ttf文件未被复制到您的服务器。由于它没有被复制,因此IIS 7.5不提供字体文件。它在本地工作,因为IIS Express能够在本地目录中找到该文件。

默认情况下,Visual Studio无法识别的文件类型将BuildAction Property设置为;字体文件是一种这样的无法识别的类型。 BuildAction为none意味着Visual Studio将在构建应用程序时忽略此文件。 BuildAction属性有几个开箱即用的选项:

  
      
  • - 文件未包含在项目输出组中,并且未在构建过程中编译。一个例子是一个文本文件   包含文档,例如自述文件。
  •   
  • 编译 - 将文件编译到构建输出中。此设置用于代码文件。
  •   
  • 内容 - 文件未编译,但包含在内容输出组中。例如,此设置是默认值   对于.htm或其他类型的Web文件。
  •   
  • 嵌入式资源 - 此文件作为DLL或可执行文件嵌入主项目构建输出中。它通常用于资源   文件。
  •   

DejaVuSansMono.ttf最合适的BuildAction属性设置为内容。通过以这种方式设置BuildAction,文件将被复制到远程服务器。不幸的是,对于每个文件都必须重复这个手动过程,其中包含一个无法识别的文件类型,这会使开发人员陷入一个单调乏味的错误过程。值得庆幸的是,Andre Loker在setting the default build action for non-default file-types in Visual Studio上有一篇很棒的博文。