文章目錄
無法參考 App_Code 資料夾下的 class
這幾天為了之前同事的問題進而聯想到的情境在做測試,大意就是希望在 web 啟動時紀錄時間讓開發人員可以得知 web 啟動至實際存取特定頁面的時間差
所以參考了 ASP.NET Global Variables Example - Dot Net Perls 在 App_Code 資料夾中加入一個 static class 與 property 要來驗證,只是過程有點出乎意料,來看看發生了什麼事吧
前置準備
建立 App_Code 資料夾
project 上按右鍵 –> Add –> Add ASP.NET Folder –> Add_Code
加入
InitialData.cs
public static class InitialData { public static DateTime IniTime { get; set; } = DateTime.Now; }
在 MVC 的 Razor View 上一切正常
在 cshtml 頁面上引用 App_Code 的 namespace
@using WebApplication3.App_Code
透過 Razor 語法將資料顯示出來
@InitialData.IniTime.ToString()
實際結果
問題
- 根據 ASP.NET MVC 的 lifecycle 應該將紀錄的動作寫在 Global.asax 或是 Startup 中
無論是何者皆無法正確參考 namespace 及 class
解決方式
將需要被其他 class 參考使用的檔案屬性 - Build Action 設定為 Compile
- compile 已不會出錯誤訊息,但 visual studio 編輯視窗仍會出現紅色錯誤
Razor View 使用則反而出現問題:type 出現在兩個 dll 中
- 解決方式一:將程式碼移出
App_Code
- 解決方式二:將使用
App_Code
的程式碼改由 Controller 存取
- 解決方式一:將程式碼移出
心得
仔細想想似乎自從開始寫 MVC 後就不常使用 App_Code
了,雖然偶爾會寫到 Razor function ,但整體來說頻率還是低很多了
App_Code
與 Razor View 相似都是即時動態編譯,所以也就出現今天遇到的 View 與其他 class 在存取指定 class 時行為不一致的現象,久久回味一下溫故知新也不賴XD
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。