【问题标题】:ASP.Net String Assignment FailureASP.Net 字符串分配失败
【发布时间】:2010-08-16 14:11:59
【问题描述】:

这是我在这里的第一篇文章,所以请放轻松 :) 我在 ASP.Net 页面上遇到了一个奇怪的问题。将字符串文字分配给变量时,我收到对象未设置错误消息。这是我遇到的错误。

[NullReferenceException: 对象 引用未设置为 对象。]
Project.Page.Page_Load(对象发送者, EventArgs e) 在 C:\Project\Page.aspx.vb:10
System.Web.UI.Control.OnLoad(EventArgs e) +91
System.Web.UI.Control.LoadRecursive() +74 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔值 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"

似乎访问任何引用类型都失败了,即使它是在加载函数中本地声明的。当 Request.IsSecureConnection 对我无效时,我最初发现了问题。我最终发现我可以用上面的代码替换它并以同样的方式失败。

问题并不总是发生。它似乎是通过从 Visual Studio 发布更新触发的,或者当我白天回家并且服务器整夜闲置时触发。一两次应用程序池回收似乎可以清除它,并且页面正常运行。

任何帮助将不胜感激。我从事桌面开发已有几年了,但我对 Web 开发还很陌生。所以也许这很明显我配置错了。我目前在 IIS 6 上使用 .Net 4。

更新

我能够使用复制页面的建议来识别行,注释掉所有内容,然后一次取消注释一行。我的测试页开始给出错误的那一行是这一行

Dim StateName As String = State.Attribute(XName.Get("name")).Value

该代码位于 IEnumerable(of XElement) 上的 foreach 中。堆栈跟踪仍然指向字符串分配,但所有其他堆栈跟踪都在现场,所以我不认为这是一个糟糕的 pdb。

此外,当这次发生错误时,再循环应用程序池或停止和启动它都无法修复错误。通过将应用程序切换到不同的应用程序池,我终于让它再次工作。

【问题讨论】:

    标签: asp.net vb.net


    【解决方案1】:

    我看不出该代码如何引发空引用异常,您确定它不是其他代码吗,但异常消息指向错误的位置,因为您的 pdb 文件已过期。根据您的描述,最有可能出现问题的代码是某些代码访问了一个已变为 null 的应用程序变量,因为应用程序池由于超时或您重新发布了 Web 应用程序而被回收。

    【讨论】:

    • 我同意该代码不应抛出空引用。我检查了我的 pdb 和 dll 上的时间戳,它们匹配;不过,我不确定这是否是判断它们匹配的准确方法。
    • 我同意这行代码不能抛出空引用异常。错误在其他地方,但您需要缩小范围。你能在另一个空白页上复制错误吗,这是页面上唯一的代码?如果没有,则从该页面添加内容到您的空白页面,直到发生错误,这可能是真正的原因,假设它在此页面上。
    【解决方案2】:

    尝试将字符串声明为常量...只是为了放大问题

    Dim Const TESTSTR as String = "test"
    Dim teststring As String
    teststring = TESTSTR
    

    如果这不起作用,请将 Const 声明移至全局某处。也许这与.NET如何/在哪里存储字符串本身变得无效有关。

    尝试每次发布时手动回收页面...可能是更新后预编译代码挥之不去的问题?我承认,这很让人头疼,这样的台词永远不会失败。

    【讨论】:

    • 我将它声明为一个局部常量并设法让它再次发生。字符串分配仍然失败。
    • 愚蠢的问题,但是您是否拥有所有最新的 .NET Framework 服务包/更新?我还不知道.NET 4.0 有什么,但是大部分代码仍然依赖于 2.0/3.5 框架类。您必须针对 4.0 进行编译吗?如果您针对较低的框架会发生什么,例如3.5?
    猜你喜欢
    • 2013-08-08
    • 1970-01-01
    • 2019-01-10
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 2013-06-29
    相关资源
    最近更新 更多