我们收到了一个很难找到原因的错误。显示的错误消息是“对象引用未设置为对象的实例”。我明白它在说什么,并且我们找到了 NULL 对象,但我们无法确定它发生的原因。
该应用程序是一个 ASP.NET 4.0 应用程序。登录后,系统会检查 Session_Start() 中设置的 Application 变量。该变量为 null 并导致此错误(有关显示的完整错误消息,请参见下文)。
我们发现这只发生在 32 位虚拟机上。以下是我们测试过的一些:
- XP 虚拟服务器错误
- XP 非虚拟 - 有效
- 2003 32 位虚拟服务器错误
- 2003 32 位非虚拟 - 作品
- 2008 64 位非虚拟 - 作品
- 2008 32 位虚拟服务器错误
- 2008 64 位虚拟 - 作品
我们通过将整个项目移动到虚拟机进行测试,并使用 VS 2010 Express 对其进行编译。然后该应用程序正常工作。然后该应用程序正常工作。因此,如果预编译这个应用程序,在 32 位虚拟机上,似乎会出现 NullReferenceException 错误。
由于我们已经证明这适用于大多数机器,我们确信它不是代码。我们现在需要检查什么?虚拟机上是否有未安装的东西?任何关于寻找或尝试的建议将不胜感激。如果您需要我澄清某些事情或提供更多信息,请告诉我。
“/TestSite”应用程序中的服务器错误。你调用的对象是空的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:对象引用未设置为对象的实例。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[NullReferenceException: 对象引用未设置为对象的实例。]
HomeMasterPage.Page_Load(Object sender, EventArgs e) +204
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) + 14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74 System.Web .UI.Control.LoadRecursive() +146 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) +2207版本信息:Microsoft .NET Framework 版本:4.0.30319;ASP.NET 版本:4.0.30319.1
评论后更新
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
ArrayList ArrActiveUser = new ArrayList();
Application["ArrActiveUser"] = ArrActiveUser;
}
...
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
ArrayList ActiveUsers = new ArrayList();
if (Application["ArrActiveUser"] != null)
{
ActiveUsers = (ArrayList)Application["ArrActiveUser"];
}
ActiveUsers.Add(Session.SessionID);
Application["ArrActiveUser"] = ActiveUsers;
}