2

私たちの環境でGlimpseを起動して実行しようとしていますが、奇妙な問題に遭遇しました。

Glimpse.Core、Glimpse.AspNet、および Glimpse.Mvc3.dll をインストールしました。web.config を構成して Glimpse を有効にすると、アプリケーション プールがリサイクルされるまで、すべて正常に動作します。AppPool がリサイクルされると、サイトが Glimpse.Mvc3.dll を「忘れて」いるかのようになり、Mvc3 タブ (実行、モデル、メタデータ) が消えます。

再現する手順は次のとおりです(私たちにとって):

  1. web.config を変更して Glimpse 構成を含める
  2. 実行、メタデータ、モデル バインディングを含むすべてのタブが表示されます
  3. アプリケーション プールのリサイクルを実行する
  4. 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
    • セッション - Glimpse.AspNet.Tab.Session
  • 一瞥(1.5.0)
    • タイムライン - Glimpse.Core.Tab.Timeline
    • トレース - Glimpse.Core.Tab.Trace
  • Glimpse.Mvc3 (1.3.2)
    • 実行 - Glimpse.Mvc.Tab.Execution
    • メタデータ - Glimpse.Mvc.Tab.Metadata
    • モデルバインディング - Glimpse.Mvc.Tab.ModelBinding
    • ビュー - 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
    • セッション - Glimpse.AspNet.Tab.Session
  • 一瞥(1.5.0)
    • タイムライン - Glimpse.Core.Tab.Timeline
    • トレース - Glimpse.Core.Tab.Trace

AppPool リサイクルの一環として、サイトが Glimpse.Mvc3.dll を「忘れている」ようです。

アイデア/提案は大歓迎です。

4

1 に答える 1

4

その理由は、ASP.Net と、最初とリサイクル後にアプリケーション ディレクトリからアセンブリをロードする方法にあるようです。最初の起動時に、アセンブリはアプリケーションの bin ディレクトリから読み込まれ、リサイクル後 (または IIS の再起動後) に、Temporary ASP.NET Filesディレクトリからアセンブリが読み込まれます。また、状況に応じて、ロードされるアセンブリの数が増減します。

Application_Startこれは、次の行をメソッドに追加することで確認できます。Global.asax

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 assemblies loaded and Glimpse.Mvc3 is one of them

リサイクル後

30 assemblies loaded and Glimpse.Mvc3 is not one of them

30 assemblies loaded and Glimpse.Mvc3 is not one of them

一時 ASP.NET ファイルディレクトリ内の対応するディレクトリを削除した後

70 assemblies loaded and Glimpse.Mvc3 is one of them

これは Glimpse とどのように関連していますか。Glimpse は を呼び出したAppDomain.Current.GetAssemblies()後、 を実装する型を探しますが、アセンブリが返されないITab場合、Glimpse.Mvc3アセンブリ内で定義されたタブは検出されないため、表示されません。

これで問題は解決しましたか? 申し訳ありませんが、この議論はglimpse issue trackerで続けたほうがよいと思います。実際のところ、すでに同様の問題を見つけましたが、それがあなたの問題かどうかはわかりません。

更新 Glimpse の今後のリリースの 1 つで修正される予定ですが、Glimpse の問題に関するコメントの 1 つに記載されているように、解決策/回避策があります。

次のステートメントをGlobal.asax Application_Startメソッドに追加するだけです。

BuildManager.GetReferencedAssemblies()

そして、あなたは行ってもいいです

于 2013-07-17T20:58:30.407 に答える