应用程序重启文件夹已删除,添加,更新

时间:2012-09-03 08:40:20

标签: c# asp.net global-asax

在应用程序的已知文件夹中修改,添加或删除某些类型的文件将导致应用程序重新启动。但是,当应用程序中的日志文件更新时,为什么应用程序不会重新启动。 然后

PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public |  BindingFlags.Static);
object o = p.GetValue(null, null);
FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
object monitor = f.GetValue(o);
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic);
m.Invoke(monitor, new object[] { }); 

通过这些更改,我可以创建/修改/删除文件夹,而不会导致应用程序重新启动。但是这段代码适用于所有应用程序的已知文件夹。我想知道是针对一个文件夹而不会导致应用程序重启。

1 个答案:

答案 0 :(得分:0)

您的问题是因为只要您修改或删除应用程序目录中的任何文件,就会导致appDomain重新启动以加载更改。你可以找到4个选项:

  1. 禁用您已尝试过的目录监控。
  2. 在应用程序下创建一个虚拟目录,并将其指向应用程序文件夹外的文件夹。将需要更改的内容移动到此文件夹并进行更改。
  3. 使用进程外会话。
  4. 修改注册表以禁用给定的监控(不推荐):
  5.   

    注册表信息

         

    loadTOCNode(3,'resolution'); HKLM \ SOFTWARE \微软\ ASP.NET \ FCNMode

         

    下表列出了FCNMode DWORD值的可能值   以及与每个值相关联的行为。

         

    值行为不存在这是默认行为。对于每一个   子目录,应用程序将创建一个将监视的对象   子目录。 0或大于2这是默认行为。   对于每个子目录,应用程序将创建一个对象   监视子目录。

         

    1应用程序将禁用文件更改通知(FCN)。 [:)。

         

    2应用程序将创建一个对象来监视main   目录。应用程序将使用此对象来监视每个对象   子目录。

    上述方法取自here

    此外,您可以浏览以下链接以获取更多信息:

    嗯,这可能有助于解决您的问题,我无法找到有关停止针对特定文件夹的appDomain更改监控的任何信息。要么它会监视变化。 希望这可以帮助。欢呼声。