2

非常に大きなWebアプリケーションプロジェクトに取り組んでいるときに、 CompilationMode = "Never" @Page属性で一部のページとコントロールをマークすることで、少し新鮮な空気を得ることができると判断しました。これまでのところ、期待どおりに機能していて、それが起こりました。私が説明しようとしているコーナーケースのシナリオは、それをうまく表現するために予期せず動作しました。このシナリオはネストされたマスターページです。

続行する前に簡単なティーザー。トップマスターページをCompilationMode=" Always "としてマークし、その下にある他のすべてのページをCompilationMode = " Never "としてマークすると、どのくらい深くネストできると思いますか?いいえ、無限ではありません。ASP.NETが持つ内部番号です。その2。なんで?-私にはわかりません。賢い人たちが私を教えてくれることを望んでいましたか?

私が話していることを示すために、5つのネストされたマスターページを持つプロジェクトを添付しました:ネストされたマスターページWebアプリケーションテストプロジェクト

予期せず機能するもう1つのコーナーケース-5つのネストされたマスターページがある場合は、2番目のページをCompilationMode = "Always"に変更し、他のすべてのページをCompilationMode="Never"に変更します。3番目のマスターページが2回適用されていることに気付くでしょう!

私がしていることが間違っているかどうかを理解するのを手伝ってください、または問題を確認してください。

ASP.NETランタイムバージョン:2.0、.NET:3.5

編集:

添付されたプロジェクトでは、すべてのマスターページがCompilationMode=" Never "に設定されています。ASPXページが必要に応じて表示されます。最初のマスター(Site.master)をCompilationMode = "Always"に変更して、私が話していることを確認します。

4

1 に答える 1

2

更新 (2010 年 1 月 21 日): 朗報: さらに調査した結果、この問題は VS2010 で修正されたことが判明しました。修正は Beta 2 後に行われたため、次のパブリック ビルドの一部になります。正確な日付はわかりませんが、そう遠くないはずです。


はい、私はこれが以前に出てきたことを思い出しているようです。実際、ネスター マスター ページと CompilationMode="Never" を含むいくつかのシナリオは壊れています。

古いメール スレッドを見ると、特定の組み合わせでのみ発生すると思います。壊れているようです (NoCompile は compilationMode=never を意味します):

  1. NoCompile ページ / Compile Master / NoCompile Master
  2. NoCompile ページ / NoCompile マスター / コンパイル済みマスター

その時点では、修正が簡単ではなく、シナリオが一般的ではないため、これを修正しませんでした。

NoCompile ページに関しては、マスター ページではなく、エンド ノードの aspx ページに使用することでほとんどの利点が得られることに注意してください。一般に、NoCompile ページはコンパイル済みページよりも少し遅くなります。それらの利点は、初回のコンパイル ヒットがなく、メモリの使用量が少ないことです。また、メモリ不足の状態で完全にアンロードすることもできます。そのため、非常に多数のエンドポイント ページがある場合に有効です (Sharepoint はそれらを使用します)。ただし、マスター ページ (ほとんどのアプリでは、多数のページで共有される少数のページしかない) では、その利点は最小限に抑えられます。もちろん、NoCompile ページにコードを含めることはできません。これが、NoCompile ページを使用する人がほとんどいない主な理由です。

簡単にまとめると、その通りです。これはバグです。:) そして、推奨される回避策は、マスター ページに対して CompilationMode=never を避けることです。

于 2010-01-18T19:44:31.917 に答える