ASP.NET站点间歇性地加载错误的框架版本

时间:2009-09-10 20:22:22

标签: .net asp.net

我有一个使用.NET框架1.1版的asp.net网站。有时,该站点将以对象null错误开始崩溃,并显示一个错误屏幕,报告.NET版本为2.0。如果我回收站点应用程序池,那么该站点将恢复正常运行,直到它在一两周后再次崩溃。如果我手动将.NET版本更改为2.0,那么我会得到相同的对象null错误。

有没有人在此之前看到过这样的问题,或者知道如何修复它?

3 个答案:

答案 0 :(得分:1)

嗯 - Scott Hanselman遇到了类似的问题 - 事实证明,在应用程序在IIS中超时并卸载后对非.NET资源的请求可能导致它以2.0模式启动。

<supportedRuntime> element添加到web.config解决了问题:

<configuration>
  <startup>
    <supportedRuntime version="v1.1.4322"/>
  </startup>
</configuration>

答案 1 :(得分:0)

就像Andrew Hare在评论中所说,您的应用程序池可能会被2.0应用程序共享。另一个选择是你的web.config中有一个2.0 dll的引用,当应用程序碰到它时,它就会崩溃。

答案 2 :(得分:0)

正如安德鲁所质疑的那样,您可能在共享应用程序池但在不同版本的框架上运行的单独程序之间存在冲突。

应用程序池本身没有设置要运行的编译器/ .net框架版本。这是由应用程序池中运行的应用程序的编译器选项卡设置的,并且每个池中只能运行一个框架。

如果这是你的情况,那就是时间......由于应用程序池本身并不驱动其中使用的框架,因此应用程序可以。第一个启动应用程序池的应用程序将设置整个池将在.net框架下运行的内容,因为池只能运行一个框架。

如果池由2.0应用程序加载/启动,则1.1崩溃。然后,您必须停止池,重新启动并立即加载1.1应用程序,这会导致池与1.1框架一起运行。

要解决此冲突,您可以创建单独的应用程序池并将应用程序分配给池。

您还必须小心确保正确设置应用程序的编译器选项卡和/或将应用程序放在正确的应用程序池中。

例如,我们有时会设置错误并造成严重破坏。检查您是否有任何1.1的应用程序,但IIS中的编译器选项卡设置为2.0。如果该应用程序是第一个加载池的应用程序,如果1.1代码与2.0框架完全兼容(并且至少根据我的经验,这肯定是可能的),这肯定会导致问题。

或者,看看是否有其他应用程序意外被放入池中,并且应用程序失败....