2

@font-face我在我的网站的级联样式表中有一个定义。当我在本地浏览站点(由 IIS Express 提供服务)时,此字体加载正常。但是,当从我的远程服务器 (IIS 7.5) 加载我的应用程序时,对该字体的引用会导致内部服务器 500 错误。为什么下面的样式在本地工作,而不是在服务器上?

@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;
}
4

1 回答 1

2

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

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

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

最合适的 BuildAction 属性设置DejaVuSansMono.ttfContent。通过以这种方式设置 BuildAction,文件将被复制到您的远程服务器。不幸的是,对于每个文件类型无法识别的文件,必须重复此手动过程,这会使开发人员陷入乏味且容易出错的过程。值得庆幸的是,Andre Loker 有一篇很棒的博客文章,介绍了在 Visual Studio 中为非默认文件类型设置默认构建操作

于 2012-07-07T02:01:36.530 回答