0

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

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[] { }); 

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

4

1 回答 1

0

您的问题是因为一旦您修改或删除应用程序目录中的任何文件,它就会导致 appDomain 重新启动以加载更改。据我所知,您有 4 个选项:

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

注册表信息

loadTOCNode(3, '分辨率'); HKLM\Software\Microsoft\ASP.NET\FCNMode

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

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

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

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

上述方法取自这里

此外,您可以通过以下链接了解更多信息:

好吧,这可能有助于解决您的问题,我找不到任何关于停止特定文件夹的 appDomain 更改监控的信息。它要么监视更改,要么不监视。希望这可以帮助。干杯。

于 2012-09-03T11:16:13.160 回答