首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止在修改web.config时重启ASP.NET应用程序?

如何防止在修改web.config时重启ASP.NET应用程序?
EN

Stack Overflow用户
提问于 2009-03-05 06:58:27
回答 4查看 44.2K关注 0票数 37

我通过ApplicationHost.CreateApplicationHost方法托管ASP.NET运行时。当我在应用程序运行时修改web.config时,我看到很多ThreadAbortException抛出的第一次机会。这是在我的应用程序崩溃之前。我假设这是因为运行时检测到配置发生了变化,并希望重新启动。

对于我们来说,这并不是一个真正支持的场景,所以我更希望我可以关闭自动重新加载。

有人知道怎么做吗?

EN

Stack Overflow用户

发布于 2009-03-10 12:16:28

同样,我遇到了一个更大的问题--更改AppDomain基目录中的任何文件或子文件夹都会导致主机环境关闭。这对我们的应用程序来说是一个很大的问题,因为我们在同一个AppDomain中运行WPF,并且我们无法在不干扰用户的情况下重新启动它。

我真的想避免不得不为应用程序的基于web的部分运行单独的AppDomain,所以我用Reflector做了一些挖掘。我发现罪魁祸首是内部类FileChangesMonitor

所以我写了一个可怕的,可怕的反射黑客来解决这个问题。我想我应该把它贴在这里,作为其他有同样问题的人的潜在解决方案。您只需要调用HttpInternals.StopFileMonitoring()来禁用对文件/文件夹更改的关闭。

代码语言:javascript
运行
复制
internal static class HttpInternals
{
    private static readonly FieldInfo s_TheRuntime = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static);

    private static readonly FieldInfo s_FileChangesMonitor = typeof(HttpRuntime).GetField("_fcm", BindingFlags.NonPublic | BindingFlags.Instance);
    private static readonly MethodInfo s_FileChangesMonitorStop = s_FileChangesMonitor.FieldType.GetMethod("Stop", BindingFlags.NonPublic | BindingFlags.Instance);

    private static object HttpRuntime
    {
        get
        {
            return s_TheRuntime.GetValue(null);
        }
    }

    private static object FileChangesMonitor
    {
        get
        {
            return s_FileChangesMonitor.GetValue(HttpRuntime);
        }
    }

    public static void StopFileMonitoring()
    {
        s_FileChangesMonitorStop.Invoke(FileChangesMonitor, null);
    }
}
票数 20
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/613824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档