[Profile] 關於 Profile 物件在 Web 專案中無效的問題與解決方法

最近連續發現幾個奇特的問題, 主要起因於在 64 位元環境下 Web 專案中無法寫入 Excel 檔案的問題, 導致我必須使用稍為特殊的方式新增專案, 而這種方式卻又引發其它的問題...

 

最近連續發現幾個奇特的問題, 主要起因於在 64 位元環境下 Web 專案中無法寫入 Excel 檔案的問題, 導致我必須使用稍為特殊的方式新增專案, 而這種方式卻又引發其它的問題。

關於 Excel 的問題不是本文的重點, 而且到目前為止也還沒有可以完全解決的方法, 所以暫且略過。倒是 Profile 的問題比較容易解決, 就先在這裡提出來供大家參考。

 

是這樣的,我這個網站並不是使用 New Web Site 的方式加入的,而是使用 New Project,再從 Visual C# 樣版中選擇 ASP.NET Web Application 樣版而建立的 (換句話說,我不確定如果使用 VB 的樣版會不會有相同的問題)。使用這種方式來新增網站會發現許多奇怪的現象,首先,它會開始在專案中使用預設的 Namespace,雖然可以改,但是改或不改都還會衍生其它的問題。最大的問題,就是你再也不能把自訂的類別放到 App_Code 裡面去;VS 也不再把 App_Code 視為 ASP.NET 的子目錄之一 (但是 App_Data, Theme 等等卻沒有改變)。如果你一定要把類別檔案放到 App_Code 裡面, 那麼恭喜, 你在其它程式中再也找不到這些類別, 不管你怎麼更改 Namespace 都一樣。

但是,你只要不使用 App_Code 這個名稱來命名子目錄,就又正常了。我試了不少次,最後我決定把類別檔案全部放進 Classes 子目錄 (只要不是叫做 App_Code 都行), 命名空間就是預設的 Root Namespace, 一切正常。

但是解決這個擾人的小問題後,卻又發現另一個小問題,那就是突然 Compiler 不承認 Profile 關鍵字了。在正常的 Web 專案中, 如果我在 Web.config 中設定了一個 Profile 項目, 例如叫做 Gender, 那麼我可以很方便的使用 Profile.Gender 來取得和設定它的值。但是現在,Compiler 卻告訴我 Profile 關鍵字「未宣告」!! 實在差點在心裡罵出髒話來...

還好, 解決的方法非常簡單, 改用 HttpContext.Current.Profile.GetPropertyValue("Gender").ToString() 就可以取出該項 Profile 的值, 改用HttpContext.Current.Profile.SetPropertyValue("Gender", "Male") 就可以設定它的值了。

以上是在 VS2008 中發現的問題, 由於我現在都在測試 VS2010, 也沒有時間回頭去測試以前的老問題了。如果你剛好也發生上述的問題, 那麼在有更好的解法之前, 就先採用如上所述的做法吧!


Dev 2Share @ 點部落