You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET项目IIS部署遇ERROR_FILE_IN_USE:Lato-Bold.ttf文件被锁求助

解决iText5字体文件锁定导致的.NET IIS部署失败问题

问题根源在于静态BaseFont实例长期持有字体文件句柄,静态成员会在应用程序域生命周期内持续存在,导致Lato-Bold.ttf文件始终被锁定,无法在部署时替换。以下是具体解决建议:

方法1:改用流加载字体并避免静态实例

不要直接通过文件路径创建BaseFont,而是先将字体文件读入内存流,再从流创建实例,这样文件句柄会被及时释放。同时避免使用静态字段,改用按需创建逻辑(可结合缓存优化性能):

// 按需创建常规字体
private BaseFont GetLatoRegularFont()
{
    var fontPath = HttpContext.Current.Server.MapPath("/assetsui/Fonts/Lato/Lato-Regular.ttf");
    using (var fs = new FileStream(fontPath, FileMode.Open, FileAccess.Read))
    {
        return BaseFont.CreateFont(fontPath, BaseFont.CP1252, BaseFont.EMBEDDED, false, fs, null);
    }
}

// 按需创建粗体字体
private BaseFont GetLatoBoldFont()
{
    var fontPath = HttpContext.Current.Server.MapPath("/assetsui/Fonts/Lato/Lato-Bold.ttf");
    using (var fs = new FileStream(fontPath, FileMode.Open, FileAccess.Read))
    {
        return BaseFont.CreateFont(fontPath, BaseFont.CP1252, BaseFont.EMBEDDED, false, fs, null);
    }
}

若担心重复创建影响性能,可使用MemoryCache缓存BaseFont实例并设置合理过期时间,确保部署前缓存能被回收。

方法2:启用Web Deploy的AppOffline规则

在发布配置中启用AppOffline规则,部署时Web Deploy会自动生成app_offline.htm,强制IIS回收应用池释放文件锁,部署完成后自动移除该文件:

  • Visual Studio发布配置中,找到「文件发布选项」勾选「启用AppOffline规则」
  • 或在pubxml配置文件中添加:
<PropertyGroup>
  <EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>
</PropertyGroup>

方法3:部署前手动回收应用池

若不想修改代码,可在部署前手动回收目标站点的应用池:

  • 打开IIS管理器,找到对应应用池右键点击「回收」,完成后再执行部署
  • 或用命令行自动化操作:
%systemroot%\system32\inetsrv\appcmd recycle apppool /apppool.name:"你的应用池名称"

方法4:将字体嵌入程序集资源

把字体文件嵌入程序集,从资源流加载,彻底避免文件系统锁定:

  1. 将Lato-Bold.ttf添加到项目,设置「生成操作」为「嵌入的资源」
  2. 通过程序集资源流加载字体:
protected static BaseFont bfBold;

static YourPdfClass()
{
    var assembly = Assembly.GetExecutingAssembly();
    using (var stream = assembly.GetManifestResourceStream("YourNamespace.assetsui.Fonts.Lato.Lato-Bold.ttf"))
    {
        bfBold = BaseFont.CreateFont("Lato-Bold.ttf", BaseFont.CP1252, BaseFont.EMBEDDED, false, stream, null);
    }
}

注意替换YourNamespace为实际项目命名空间,确保资源路径正确。

内容的提问来源于stack exchange,提问作者Umberto Leone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:42:34