我在网站的级联样式表中定义了@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;
}
答案 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上有一篇很棒的博文。