次に示すページを見つつ、読んでいただきたい。(欲を言えばVS2005を触りつつ、です。)
@IT:.NET TIPS [ASP.NET]アプリケーション全体で共有するデータを扱うには?(静的メンバ編) - C# VB.NET Webフォーム
http://www.atmarkit.co.jp/fdotnet/dotnettips/122globalobj/globalobj.html
static変数とApplicationオブジェクトの事に関してはリンクに書かれています。また経緯についても割愛させていただきます。
まずVisual Studio 2005を立ち上げていただきたい。 <おいっ!
(空の)Webサイトを作ってもらって、[新しい項目の追加]からグローバル アプリケーション クラスを選択し、Global.asaxのファイル名のままで「追加」を押そうとします。
何か違うことに気づきませんでしたか。
[別のファイルにコードを書き込む(P)]が選択不可になっています。
VS.NET(2003)ではコードビハインドだったのに、VS2005ではそうでなくなっています。
「どういうことー(どんだけ~)?」と思いながらクリックしました。
<%@ Application Language="C#" %>
<script runat="server">
void Application_Start(object sender, EventArgs e)
{
// アプリケーションのスタートアップで実行するコードです
}
void Application_End(object sender, EventArgs e)
{
// アプリケーションのシャットダウンで実行するコードです
}
void Application_Error(object sender, EventArgs e)
{
// ハンドルされていないエラーが発生したときに実行するコードです
}
void Session_Start(object sender, EventArgs e)
{
// 新規セッションを開始したときに実行するコードです
}
void Session_End(object sender, EventArgs e)
{
// セッションが終了したときに実行するコードです
// メモ: Web.config ファイル内で sessionstate モードが InProc に設定されているときのみ、
// Session_End イベントが発生します。session モードが StateServer か、または SQLServer に
// 設定されている場合、イベントは発生しません。
}
</script>
こんな風にコードが色づけ無しで表示されて、さらに驚きました。記事内の画像と見比べてください。
ちなみにファイル読み込み直後だけで、しばらくしたら色分けしてくれます。
それでも、書き方が全然違うことに戸惑いを隠せません。クラス名が無いというのも大きな違いです。
そして思いました。
「どこに宣言すればいいんだ~。」
その日はとりあえずページクラスに宣言しました。
そして1日後・・・
試しに<script runat="server"></script> 中に書いてみましたところ、デバッグの前のビルドを通りました。
解決したかに見えましたが、新たな問題が浮上しました。
「“Global.”でアクセスできないぞ~。」
今もなお(「そして1日後・・・」は今日のことですが)このやり方では解決していません。
July 17. 2007
タイトル編集、タグ修正