我们正在尝试获取 Glimpse在我们的环境中启动并运行,但遇到了一个奇怪的问题。
我们已经安装了 Glimpse.Core、Glimpse.AspNet 和 Glimpse.Mvc3.dll,当我们配置 web.config 来启用 Glimpse 时,一切都会正常工作直到应用程序池回收。一旦 AppPool 回收,站点就好像“忘记”了 Glimpse.Mvc3.dll,并且 Mvc3 选项卡(执行、模型、元数据)消失了。
以下是(我们)重现的步骤:
- 修改 web.config 以包含 Glimpse 配置
- 将显示所有选项卡,包括“执行”、“元数据”和“模型绑定(bind)”
- 执行应用程序池回收
- MVC3 Glimpse 选项卡将不再显示(但其他选项卡将会显示)
在 AppPool 回收之前,Glimpse.axd 显示以下已注册选项卡:
- Glimpse.AspNet (1.3.1)
- 配置 - Glimpse.AspNet.Tab.Configuration
- 环境 - Glimpse.AspNet.Tab.Environment
- 请求 - Glimpse.AspNet.Tab.Request
- 路由 - Glimpse.AspNet.Tab.Routes
- 服务器 - Glimpse.AspNet.Tab.Server
- session - Glimpse.AspNet.Tab.Session
- Glimpse (1.5.0)
- 时间线 - Glimpse.Core.Tab.Timeline
- 跟踪 - Glimpse.Core.Tab.Trace
- Glimpse.Mvc3 (1.3.2)
- 执行 - Glimpse.Mvc.Tab.Execution
- 元数据 - Glimpse.Mvc.Tab.Metadata
- 模型绑定(bind) - Glimpse.Mvc.Tab.ModelBinding
- View - Glimpse.Mvc.Tab.Views
AppPool 回收后,Glimpse.axd 显示以下已注册选项卡:
- Glimpse.AspNet (1.3.1)
- 配置 - Glimpse.AspNet.Tab.Configuration
- 环境 - Glimpse.AspNet.Tab.Environment
- 请求 - Glimpse.AspNet.Tab.Request
- 路由 - Glimpse.AspNet.Tab.Routes
- 服务器 - Glimpse.AspNet.Tab.Server
- session - Glimpse.AspNet.Tab.Session
- Glimpse (1.5.0)
- 时间线 - Glimpse.Core.Tab.Timeline
- 跟踪 - Glimpse.Core.Tab.Trace
就好像该网站“忘记”了 Glimpse.Mvc3.dll 作为 AppPool 回收的一部分。
非常感谢任何想法/建议。
最佳答案
原因似乎是 ASP.Net 及其首次和回收后从应用程序目录加载程序集的方式。首次启动时,程序集会从应用程序的 bin 目录加载,在回收(甚至 IIS 重新启动)后,它会从临时 ASP.NET 文件目录加载程序集。并根据情况加载或多或少的程序集。
您可以通过将以下行添加到 Global.asax
中的 Application_Start
方法来亲自查看这一点
protected void Application_Start()
{
Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies();
bool glimpseMvc3AssemblyLoaded = loadedAssemblies.Any(a => a.FullName.Contains("Glimpse.Mvc3"));
File.AppendAllText(
"C:\\temp\\output.txt",
string.Format(
"{0}{1} assemblies loaded and Glimpse.Mvc3 is{2} one of them",
Environment.NewLine,
loadedAssemblies.Length,
glimpseMvc3AssemblyLoaded ? string.Empty : " not"));
}
如果运行该命令,您将在 output.txt 文件中看到以下条目(尽管数字可能有所不同)
第一次初始启动时:
已加载 60 个程序集,Glimpse.Mvc3 就是其中之一
回收后
已加载 30 个程序集,但 Glimpse.Mvc3 不是其中之一
已加载 30 个程序集,但 Glimpse.Mvc3 不是其中之一
删除Temporary ASP.NET Files目录中的相应目录后
已加载 70 个程序集,Glimpse.Mvc3 就是其中之一
这与 Glimpse 有什么关系。那么 Glimpse 会调用 AppDomain.Current.GetAssemblies()
,之后它将查找实现 ITab
的类型,但如果 Glimpse.Mvc3
> 不返回程序集,则不会发现其中定义的选项卡,因此不会显示。
这能解决您的问题吗?恐怕不是,但我认为最好在 glimpse issue tracker 上继续讨论。 ,事实上我已经找到了 similar issue在那儿,但我不确定它是不是你的。
更新 即将发布的 Glimpse 版本中将会有一个修复程序,但同时也有一个解决方案/解决方法,如 one of the comments 中所述。关于 Glimpse 问题。
只需将以下语句添加到 Global.asax Application_Start
方法
BuildManager.GetReferencedAssemblies()
关于asp.net - 浏览 MVC3 DLL 为 'forgotten' 作为应用程序池回收的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17706748/