2010-08-16 59 views
2

這是我在這裏的第一篇文章,所以容易對我:)我有一個ASP.Net頁面奇怪的問題。將字符串文字分配給變量時,我得到的對象未設置錯誤消息。這是我得到的錯誤。ASP.Net字符串分配失敗

[的NullReferenceException:對象 參考不設置到 對象的實例。]
Project.Page.Page_Load(對象發件人, EventArgs的)在 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,布爾 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開發相當陌生。所以也許這是顯而易見的,我配置錯了。我目前使用的.Net 4 IIS 6上

UPDATE

我能夠確定使用複製頁,註釋東西展現出來,然後取消註釋一行在時間的推薦線路。我的測試頁開始給錯誤的路線是這樣一個

昏暗Statename的作爲字符串= State.Attribute(XName.Get(「名字」))。值

該代碼是在foreach通過IEnumerable(XElement)。堆棧跟蹤仍然指向字符串分配,但所有其他堆棧跟蹤都是現貨,所以我不認爲這是一個糟糕的pdb。

此外,當此次發生錯誤時,無法回收應用程序池或停止並啓動它將修復錯誤。我終於通過將應用程序切換到不同的應用程序池來重新開始工作。

回答

0

我看不出如何代碼可以拋出一個空引用異常,你確定它不是一些其他代碼,但異常信息指向錯誤的地方,因爲你的pdb文件已過期。根據您的描述,錯誤代碼的最可能候選對象是訪問已變爲null的應用程序變量的一些代碼,因爲應用程序池由於超時而已回收或因爲您已重新發布了該Web應用程序。

+0

我同意該代碼不應該能夠拋出空引用。我檢查了我的pdb和dll上的時間戳,他們匹配;雖然,我不確定這是否是一種準確的方式來表明它們是匹配的。 – cduncan 2010-08-16 16:38:20

+0

我同意這行代碼不能拋出空引用異常。錯誤是在別的地方,但你需要縮小在哪裏。你能否在另一個空白頁上覆制錯誤,這是頁面上唯一的代碼?如果沒有,那麼將這些內容添加到您的空白頁面,直到發生錯誤,這可能是真正的原因,假設它在本頁面上。 – 2010-08-16 17:06:06

0

嘗試聲明字符串常量......只是放大的問題

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

如果不起作用,將常量聲明某處全球。也許這與.NET如何/在哪裏存儲字符串本身變得無效有關。

嘗試每次發佈時都手動回收頁面......也許這是預編譯代碼在更新後徘徊的問題?我承認,這是一個頭部劃痕,像這樣的線條永遠不會失敗。

+0

我宣稱它是一個本地常量,並設法讓它再次發生。它仍然在字符串分配上失敗。 – cduncan 2010-08-16 20:56:11

+0

愚蠢的問題,但你有所有最新的.NET Framework服務包/更新?我不知道.NET 4.0還有什麼用,但是很多代碼仍然依賴於2.0/3.5框架類。你需要編譯4.0嗎?如果你的目標是較低的框架,例如3.5? – 2010-08-17 15:58:14