- PR -

コードビハインドされたファイルから、静的メンバを呼び出せない

投稿者投稿内容
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-10-20 13:05
先程、間違えてXMLにスレッドを作ってしまいましたので投稿しなおします。

お世話になります。
ASP.NETの質問です。

Global.asaxファイルにコードビハインドにより関連付けられているGlobal.asax.csの中で、

+-------------------------------------------------------+
public class Global: System.Web.HttpApplication {

public static readonly string title = "タイトル";
+-------------------------------------------------------+

といったように静的メンバを宣言しています。

アプリケーション内のファイル「test.aspx」内に、

<%=Global.title%>

とすると呼び出せますが、
以下のようにコードビハインドされた「test.aspx.vb」内の「Page_Load」イベント内で呼び出せません。

+--------------------------------------------------+
Imports System
Imports System.Data.SqlClient
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class test1
Inherits Page

Private Sub Page_Load(sender as Object, e as EventArgs)
Dim strTitle as String = Global.title <---ここでエラー

+--------------------------------------------------+

エラーメッセージは、
「BC30451: Name 'Global' is not declared.」
です。

コードビハインドされたファイルから静的メンバを呼び出すには、何かルールがあるのでしょうか?
それとも、何か別の理由によるものでしょうか?

よろしくお願いいたします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2005-10-20 13:25
こんにちは。

名前空間が参照できていないだけでは?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-20 13:43
C#とVB.NETどっちなんですか?
もしかして、2つのプロジェクトがあって、VB.NETの方はC#のWebプロジェクトのサブディレクトリをルートとして使用していて、VB.NETの方のルートにはGlobal.asaxが無かったりしますか?

それなら、VB.NETがWebアプリケーションとしてIISに登録されていないか確認してみてください。

ん〜、でもこれだとtest.aspxの方では見えるというのがなぜか分からないな。
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-10-20 14:15
お返事ありがとうございます。

> 名前空間が参照できていないだけでは?
>
静的メンバを参照するために、名前空間の参照が必要のでしょうか?
とりあえず
「test.aspx.vb」で、
「Imports Global」
と書いてみましたが、ダメでした・・・よく方法が分かりませんので、
その方法までご教授いただけると助かります。初心者で申し訳ないです。


> もしかして、2つのプロジェクトがあって、
> VB.NETの方はC#のWebプロジェクトのサブディレクトリをルートとして使用していて、
> VB.NETの方のルートにはGlobal.asaxが無かったりしますか?
>
いえ、vb.netとC#混在でわかりにくかったかもしれませんが、
test.aspx.vbは都合上VBにしてあるだけで、同じアプリケーションです。
従って、test.aspxはちゃんと動きます。
説明不十分で申し訳なかったです。


どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2005-10-20 14:48
> いえ、vb.netとC#混在でわかりにくかったかもしれませんが、
> test.aspx.vbは都合上VBにしてあるだけで、同じアプリケーションです。

同じアプリケーションって、これどうやって実現してます?
VS.NETでやろうとすると、コードビハインド部分のcsファイルとvbファイルを
一緒にはコンパイルできないはずなので何かおかしなことになると思うのですが?
問題もそのあたりから発生してそうな気がする。。。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-20 15:06
同じアプリケーションだとは思うんですが、同じプロジェクトってことはないですよね。(そういうこと出来るのかな・・)
で、本当に同じアプリケーションとしてIISに登録されているかどうかという所が問題です。

プロジェクトはどんな構成になってますか?
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-10-20 15:15
お返事ありがとうございます。

> 同じアプリケーションって、これどうやって実現してます?
> VS.NETでやろうとすると、コードビハインド部分のcsファイルとvbファイルを
> 一緒にはコンパイルできないはずなので何かおかしなことになると思うのですが?
> 問題もそのあたりから発生してそうな気がする。。。
>
おっしゃっている事が原因のような気がしてきました。
IISで同じ仮想ディレクトリ化で、以下のようにファイルを配置しています。
global.asax
global.asax.cs
test.aspx
test.aspx.vb


> 同じアプリケーションだとは思うんですが、同じプロジェクトってことはないですよね。
> (そういうこと出来るのかな・・)
> で、本当に同じアプリケーションとしてIISに登録されているかどうかという所が問題です。
>
プロジェクトとは、VisualStudioのプロジェクトと解釈してよろしいでしょうか?
私の環境では、VS.NETは使っておらず、直接コードを記述しています。
ファイルの配置については、上記の通りです。

とりあえず、test.aspx.vb を test.aspx.cs にして試してみることにします。
Dr.Mancini
常連さん
会議室デビュー日: 2003/01/23
投稿数: 35
投稿日時: 2005-10-20 15:36
自己レスです。

global.asax.cs と test.aspx.cs をC#に統一させましたが、ダメでした。
やはり参照のところでで、「BC30451: Name 'Global' is not declared.」が出てしまいます。

スキルアップ/キャリアアップ(JOB@IT)