- - PR -
コードビハインドされたファイルから、静的メンバを呼び出せない
«前のページへ
1|2|3
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-20 19:32
Dr.Manciniさん、こんばんは。
ごめんなさい、大ウソぶっこいてしまいました。 前回の私の投稿にある、2 つ目のリンクの方を良〜く見たら、実行時にもコンパイルされる、という事が記述されてました…。申し訳ない。m(_ _)m 【追記】 Codebehind 属性ではなくて src 属性で指定するんですね…。 [ メッセージ編集済み 編集者: きくちゃん 編集日時 2005-10-20 19:39 ] | ||||||||
|
投稿日時: 2005-10-20 19:38
> 前回の私の投稿にある、2 つ目のリンクの方を良〜く見たら、
> 実行時にもコンパイルされる、という事が記述されてました…。 > 申し訳ない。m(_ _)m > いえいえ・・・とりあえず、従来通りApplication変数を使って凌ぐことにしました。 案外難しいものですね・・・。 | ||||||||
|
投稿日時: 2005-10-24 13:18
Dr.Manciniさん、こんにちは。
ということなので、もう見てないかも知れませんが、自分自身、興味もありましたので…。 試しに、アプリケーションディレクトリに index.aspx、index.aspx.vb、Global.asax、Global.asax.cs の 4 つのファイルを配置して実行してみたところ、%windir%\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\ の該当フォルダ内に、それぞれのソースファイルに対応すると思われる 4 つの DLL ファイルが作成されていました。 IDE から ビルドを実行すると、ビハインドのソースは事前にコンパイルされ、単一のDLL(アセンブリ)となるために問題とはならないのですが、実行時コンパイルに任せると、それぞれが別の DLL となり、参照関係がどこかで指定されない限り今回のようなコンパイルエラーが発生してしまうのではないでしょうか(推測ですが)。 ただ、aspx および asax ファイル側については、特に何もしなくても同一アプリケーション内のメンバとして認識されるため、aspx ファイル内のインラインコードから、Global クラスのメンバにアクセスすることは可能でした(Global.asax が Global を継承しているからですね)。 ということは、どこかで アセンブリの参照設定が出来れば良いのではないかと思い、 @ Page ディレクティブの CompilerOptions 属性とか、web.config の probing だとか assemblies だとかの要素についてざっと調べてみたのですが、DLL の名前なんかも動的に決定されるみたいですし、ちょっと難しそうでした。 そこで、もしやと思い、ビハインドコードを単一のファイルに記述し(ということで記述言語は統一)、aspx および asax の Src 属性に、その、同じファイル名を指定してみました。 結果、生成された DLL は 3 つ。 同名のクラスを持つ別のアセンブリが生成される可能性もあったわけですが、実行したところ、aspx のビハインド側、インライン側ともに、ちゃんと同じものを見ているようです。 まあ、もしかしたらこんな事わざわざ実験しなくとも、どこかでこの辺の仕様が公開されているのかも知れませんが、ちょっと見つけられませんでしたので…。
| ||||||||
|
投稿日時: 2005-10-24 13:48
きくちゃんさん、こんにちは。
わざわざ調べて頂いて、ありがとうございました。 内容について理解できました。 ビハインドコードを共通化させるという事ですが、 あとあと管理が厄介になりそうなので定数の参照にはApplication変数を使うことにします。 しかし仕組みが理解できたので、すっきりしました。 やはりASP.NETはIDEを使うのがよさそうです。 | ||||||||
«前のページへ
1|2|3
