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

Simple Injection强制重启后失效,求无需手动清理的解决方案

解决Simple Injection在Web.Config修改/网站重启后失效的问题

我之前也碰到过几乎一模一样的情况!当时折腾了好一阵才找到根源,下面是我总结的几个可行解决方案:

一、应用启动时自动清理过期缓存

最省心的办法是在应用启动阶段自动检查并清理旧的PluginCache文件,避免加载过期的缓存数据。你可以在Global.asax的Application_Start方法里加入这段逻辑:

protected void Application_Start()
{
    var pluginCacheDir = Server.MapPath("~/App_Data/Temp/PluginCache");
    if (Directory.Exists(pluginCacheDir))
    {
        // 获取当前程序集的最后修改时间,用来判断缓存是否过期
        var mainAssembly = Assembly.GetExecutingAssembly();
        var assemblyLastUpdated = File.GetLastWriteTimeUtc(mainAssembly.Location);

        // 遍历缓存文件,删除早于程序集更新时间的文件
        foreach (var cacheFile in Directory.GetFiles(pluginCacheDir))
        {
            var cacheFileLastUpdated = File.GetLastWriteTimeUtc(cacheFile);
            if (cacheFileLastUpdated < assemblyLastUpdated)
            {
                File.Delete(cacheFile);
            }
        }
    }

    // 正常初始化Simple Injection容器
    var container = new Container();
    // ... 你的依赖注入配置代码
}

这样每次应用重启(包括修改web.config触发的重启)都会自动清理过期缓存,不用再手动删除文件夹和执行iisreset。

二、调整Simple Injection的缓存策略

如果你用了Simple Injection的插件扩展(比如SimpleInjector.Extensions.Plugins),可以检查一下是否有缓存相关的配置项,让它在程序集变化时自动失效缓存。比如有些场景下,你可以配置容器调整缓存规则:

var container = new Container();
// 示例:禁用动态代理程序集缓存(生产环境谨慎使用,建议先测试验证)
container.Options.EnableDynamicProxyAssemblyCache = false;

注意:这个配置需要根据你使用的Simple Injection版本和插件情况调整,建议结合官方文档确认对应的缓存配置项。

三、自动化重启流程(适合手动运维场景)

如果你们经常需要手动重启网站,可以写一个简单的批处理脚本,把清理缓存和重启IIS的步骤整合在一起,避免遗漏:

@echo off
set "WebsitePath=C:\YourWebsiteRootDirectory"
rmdir /s /q "%WebsitePath%\App_Data\Temp\PluginCache"
iisreset
echo 缓存清理完成,IIS已重启
pause

每次需要重启时运行这个脚本即可,不用手动操作两步。

四、检查文件夹权限

有时候缓存失效是因为应用池账号没有足够的权限写入PluginCache文件夹,导致重启后无法生成新的缓存文件,只能加载旧的失效缓存。你可以:

  • 找到App_Data/Temp/PluginCache文件夹
  • 右键→属性→安全选项卡
  • 确保应用池的身份账号(比如IIS AppPool\YourAppPoolName)拥有读取、写入、修改权限

这样重启时应用就能正常生成新的缓存文件,不会再加载旧数据。


内容的提问来源于stack exchange,提问作者Julien Kulker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:17:56