这是我在这里发表的第一篇文章,所以对我很轻松:)我在ASP.Net页面遇到了一个奇怪的问题。在为变量分配字符串文字时,我得到的对象没有设置错误消息。这是我得到的错误。
[NullReferenceException:Object 引用未设置为的实例 对象。]
Project.Page.Page_Load(对象发送者, EventArgs e)in C:\项目\ Page.aspx.vb:10
System.Web.UI.Control.OnLoad(EventArgs的 e)+91
System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+2207
这是错误指向的代码。这个片段的最后一行是错误抱怨的第10行
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim teststring As String
teststring = "test"
它似乎无法访问任何引用类型,即使它是在load函数中本地声明的。当Request.IsSecureConnection在我身上退出时,我最初发现了这个问题。我最终发现我可以用上面的代码替换它并以同样的方式失败。
问题并非总能发生。它似乎是通过从Visual Studio发布更新来触发的,或者当我回家当天并且服务器整夜闲置时。一个或两个应用程序池回收似乎清除它,页面正常运行。
非常感谢任何帮助。我已经做了几年的桌面开发,但我对Web开发还很陌生。所以也许这是显而易见的,我配错了。我目前在IIS 6上使用.Net 4。
更新
我能够使用复制页面的建议识别该行,将所有内容评论出来,然后一次取消注释一行。我的测试页开始给出错误的那一行是
Dim StateName As String = State.Attribute(XName.Get(“name”))。Value
该代码位于IEnumerable(XElement)的foreach中。堆栈跟踪仍然指向字符串赋值,但所有其他堆栈跟踪都是正确的,因此我认为这不是一个糟糕的pdb。
此外,当这次发生错误时,没有回收应用程序池或停止和启动它的数量将修复错误。我终于通过将应用程序切换到另一个应用程序池来重新运行。
答案 0 :(得分:0)
我没有看到该代码如何抛出空引用异常,你确定它不是其他代码,但异常消息指向错误的位置,因为你的pdb文件已经过时了。根据您的描述,最有可能成为错误代码的候选者是访问应用程序变量的一些代码,该应用程序变量已经变为空,因为应用程序池由于超时而重新发布,或者因为您重新发布了Web应用程序。
答案 1 :(得分:0)
尝试将字符串声明为常量...只是为了放大问题
Dim Const TESTSTR as String = "test"
Dim teststring As String
teststring = TESTSTR
如果这不起作用,请将Const声明移到全局某处。也许这与.NET存储字符串本身变得无效的方式/位置有关。
每次发布时尝试手动回收页面...也许这是预编译代码在更新后延迟的问题?我承认,这是一个令人头疼的问题,像这样的一条线应该永远不会失败。