2

在处理一个相当大的 Web 应用程序项目时,我决定通过使用CompilationMode="Never" @Page 属性标记一些页面和控件来获得一点新鲜空气。到目前为止一切顺利,按预期工作,然后它发生了。我将要解释的一个极端案例的表现出乎意料地表现得很好。此方案是嵌套母版页。

继续之前的快速预告。如果您将顶部母版页标记为 CompilationMode=" Always ",并且将其下方的所有其他主页标记为 CompilationMode=" Never ",您认为可以嵌套多深?不,它不是无限的,也不是 ASP.NET 拥有的一些内部数字。它的2。为什么?- 我不知道,我希望你们中的一些聪明人能启发我?

我附上了一个包含 5 个嵌套母版页的项目来演示我在说什么:嵌套母版页 Web 应用程序测试项目

另一个意外工作的极端情况 - 如果您有 5 个嵌套母版页,请将第二个更改为 CompilationMode="Always",将所有其他页面更改为 CompilationMode="Never"。您会注意到第三个母版页被应用了两次

请帮助我了解我所做的事情是否不正确,或确认问题。

ASP.NET 运行时版本:2.0,.NET:3.5

编辑:

附加的项目将所有母版页设置为 CompilationMode=" Never "。ASPX 页面根据需要显示。将第一个 master (Site.master) 更改为 CompilationMode="Always" 以查看我在说什么。

4

1 回答 1

2

更新(2010 年 1 月 21 日):好消息:经过更多调查,事实证明此问题已在 VS2010 中修复。该修复是在 Beta 2 之后进行的,因此它将成为下一个公共构建的一部分。我没有确切的日期,但应该不会太远。


是的,我似乎记得以前出现过这种情况,确实有些涉及嵌套母版页和 CompilationMode="Never" 的场景被破坏了。

看着一个旧的邮件线程,我认为它只发生在某些组合中。看起来它已经坏了(其中 NoCompile 表示编译模式 = 从不):

  1. NoCompile 页面/编译大师/NoCompile 大师
  2. NoCompile Page / NoCompile Master / Compiled Master

当时,我们没有修复这个问题,因为修复很重要,而且场景并不常见。

请注意,当涉及到 NoCompile 页面时,大部分好处是将它用于端节点 aspx 页面,而不是母版页面。通常,NoCompile 页面的运行速度比已编译页面慢一些。它们的好处是它们没有第一次编译命中,而且它们使用的内存更少。此外,它们可以在内存压力下完全卸载。这就是为什么当您拥有大量端点页面时它们很有意义(Sharepoint 使用它们)。但是在母版页上(大多数应用程序只有少数几个页面共享),这种好处将是微乎其微的。当然,NoCompile 页面中不能有代码,这是很少有人使用它们的主要原因。

所以快速总结是:你是对的,这是一个错误!:) 推荐的解决方法是避免母版页的 CompilationMode=never。

于 2010-01-18T19:44:31.917 回答