3 回答

TA貢獻1820條經(jīng)驗 獲得超2個贊
同樣,我遇到了一個更大的問題- 對AppDomain基本目錄中的任何文件或子文件夾進行更改都會導致托管環(huán)境關(guān)閉。對于我們的應用程序來說,這是一個很大的問題,因為我們在同一AppDomain中運行WPF UI,并且在不干擾用戶的情況下無法重新啟動它。
我真的想避免為應用程序的基于Web的部分運行單獨的AppDomain,所以我做了Reflector的挖掘工作。我發(fā)現(xiàn)罪魁禍首是內(nèi)部階級FileChangesMonitor。
所以我寫了一個可怕的可怕的反思黑客來解決這個問題。我以為我會將其發(fā)布在這里,作為其他有相同問題的潛在解決方案。您只需要致電HttpInternals.StopFileMonitoring()即可在文件/文件夾更改禁用關(guān)閉功能。
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);
}
}
- 3 回答
- 0 關(guān)注
- 674 瀏覽
添加回答
舉報