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

これらの変更により、アプリケーションを再起動せずにフォルダーを作成/変更/削除できます。ただし、このコードはすべてのアプリケーションの既知のフォルダー用です。知りたいのは、アプリケーションを再起動せずに1つのフォルダー用です。

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 アプリケーションは、メイン ディレクトリを監視するためのオブジェクトを 1 つ作成します。アプリケーションは、このオブジェクトを使用して各サブディレクトリを監視します。

上記の方法はこちらから

また、詳細については、次のリンクを参照してください。

特定のフォルダーの appDomain 変更監視を停止することについては何もわかりませんでした。変更を監視するかどうかのどちらかです。お役に立てれば。乾杯。

于 2012-09-03T11:16:13.160 に答える