3 回答
TA贡献1820条经验 获得超2个赞
同样,我遇到了一个更大的问题- 对AppDomain基本目录中的任何文件或子文件夹进行更改都会导致托管环境关闭。对于我们的应用程序来说,这是一个很大的问题,因为我们在同一AppDomain中运行WPF UI,并且在不干扰用户的情况下无法重新启动它。
我真的想避免为应用程序的基于Web的部分运行单独的AppDomain,所以我做了Reflector的挖掘工作。我发现罪魁祸首是内部阶级FileChangesMonitor。
所以我写了一个可怕的可怕的反思黑客来解决这个问题。我以为我会将其发布在这里,作为其他有相同问题的潜在解决方案。您只需要致电HttpInternals.StopFileMonitoring()即可在文件/文件夹更改禁用关闭功能。
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 关注
- 652 浏览
添加回答
举报