- ベストアンサー
asp.netのクラスの動作で躓いています
- asp.netの動作環境検証テストにおいて、クラスの動作で問題が発生しています。
- ローカル環境ではエラーが出ず、サーバ環境への移行後にエラーが発生しています。
- エラーメッセージによると、型 'Class1' が定義されていません。原因の判断がつかないため、問題が発生している要因について教えていただきたいです。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
ソースコードの公開ありがとうございました。 ソースを見てわかったこの現象の解決策ですが 以下の3つのうちどちらかを対応すれば解決すると思います。 (ほぼ断言します) ・IISのASP.NETの稼動バージョン設定がASP.NET 2.0になっていない 稼動サーバーのIIS(Internet Information Server)の 設定で問題のWebアプリケーションを動かすために、 仮想ディレクトリを作っているかと思いますが、その仮想ディレクトリ の[プロパティ]で[ASP.NET]というタブがあるので、 「ASP.NET バージョン」を「2.050727」に変更してください。 (恐らく、「1.1.4322」になっているような気がします) ・上記でダメだった場合、 問題サーバーの[スタート]→「ファイル名を指定して実行」を起動し、 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i を実行してみてください。 (恐らくASP.NETの構成がおかしくなっているので、 上記をやることで、ASP.NETの構成を正しくリセットすることができます) ・もし上記2つでもダメだった場合、 App_Codeに書いた、Class1.vb のソースファイルにNewメソッドを 追加してください。 Imports Microsoft.VisualBasic Public Class Class1 Public Sub New() End Sub End Class 以上、宜しくお願いします。
その他の回答 (4)
>webconfig >default.aspx >default.vb >□App_Code >class1.vb BinディレクトリもUPしてください。 Binディレクトリがないのであれば、サーバー側で空のBinディレクトリを作ってください。Binディレクトリがないためにエラーになることは多々あります。 >これはIISマネージャにて設定するものでしょうか? >明示的に作業をして権限を与えた、というようなことはしておりません。 IISマネージャーではなく、ファイル操作するエクスプローラー(Windowsキー + Eキーで起動)でASPNETユーザに権限を与えて下さい。ないとエラーになります。 >これは問題の仮想ディレクトリに設定してあるフォルダの上位フォルダを仮想ディレクトリに設定してある場合は、ということでよろしいでしょうか? 既定のWebサイトも問題の仮想ディレクトリも両方必要です。 また、仮想ディレクトリ内にまた子の仮想ディレクトリを作成した場合も子に対しても設定が必要です。 そんなところでしょうか。IISは再起動をしているということですが、何か設定した度に再起動して確認してみてください。
お礼
お世話になっております。 さて、解決しましたのでご報告させていただきます。 結論といたしましては、対象の仮想ディレクトリがルートのひとつ下のディレクトリで行っていた事が原因でした。 仮想ディレクトリ直下へファイルを移動したところ、解決しました。 また、web.configで出てしまうエラーも、ビルドのプロパティを.net framewok2.0に設定することで解決しました。 基本的な部分でのミスでお手数おかけして申し訳ございませんでした。 色々とご教授いただいたおかげで、問題解決に繋がりました。 本当にありがとうございました。
補足
度々ご回答ありがとうございます。 ご教授いただいた作業を一通り行ったのですが駄目でした…。 ただ、サーバ側の問題だというのは大体分かりましたので再度初期設定自体を見直して見ます。 あと、もし可能でしたらあと数点質問させてください。 > IISマネージャーではなく、ファイル操作するエクスプローラー(Windowsキー + Eキーで起動)でASPNETユーザに権限を与えて下さい。ないとエラーになります。 windows上で言いますと、everyoneにフルアクセス権限を与えている状態で問題ないでしょうか?ASPNETユーザというものを作る必要があるのでしょうか? 関係ないかと思い省いていたのですが、visual web developer 2008でデバッグ時に自動でできるwebconfigをそのままコピーすると以下のエラーが発生するためその部分をコメントアウトしているのですが、問題ないでしょうか? ----------------------------------- 構成にエラーがあります。 説明: この要求を処理するために必要な構成ファイルの処理中にエラーが発生しました。以下のエラーの詳細を確認し、構成ファイルに変更を加えてください。 パーサー エラー メッセージ: アプリケーション レベルを超えて allowDefinition='MachineToApplication' として登録されているセクションを使うことはできません。このエラーは、仮想ディレクトリが IIS でアプリケーションとして構成されなかった場合に発生します。 ソース エラー: 行 47: <authentication mode="Windows"/> ----------------------------------- 以上よろしくお願いいたします。
ダメでした。これ以上はもういいです。ありがとうございました。 で結論づけちゃうのもちょっと・・・ 後で同じ問題に悩んだ人がこのスレッドを見た時に 曖昧になってしまいますので、ダメだったら、ダメだったなりに 模索すべきです。 さて、気になったのは、Binディレクトリのファイルも サーバーにすべてUPしてますよね? きっと他のサーバーには存在し、問題のサーバーだけに 存在しないファイルやDLLがあるような気がします。 (ここでいうDLLはBinディレクトリという意味ではなく、 GAC(グローバルアセンブリキャッシュ)に登録されていない DLLがあるかもしれないという意味です) また、問題のサーバーや、仮想ディレクトリやApp_Codeディレクトリ に対し、ASPNETユーザに権限は付与されていますか? なければ権限付与してみてください。 また、IISの「ASP.NET バージョン」ですが、仮想ディレクトリだけではなく、仮想ディレクトリより上位にあるフォルダや仮想ディレクトリ、Webサーバーに対しても同様に「ASP.NET バージョン」を「2.050727」に設定しましたか? いずれにしても今まで教示した中で絶対に解決できるはずです。 私自身、過去に何度もこの事象にはまってきて実際に 体験してますので、教示した内容は絶対に間違いないです。 後は、ちょっとしたやり方や対象箇所が間違ってたとか そんな類だと思いますので、ご確認ください。 一応、今まで教示した中で設定は設定し終えた後、IISの再起動とかされていますよね?一応、何かを設定したら念のためIIS Adminサービスの再起動はした上で確認してください。
お礼
本当に度々申し訳ございません。また、ありがとうございます。 月曜までサーバ環境が触れないため、お礼と補足のみになりますがご容赦ください。 > BinディレクトリのファイルもサーバーにすべてUPしてますよね? サーバ側へ配置しているのは webconfig default.aspx default.vb □App_Code class1.vb のみとなります。他に必要なものがあるということでしょうか? > 問題のサーバーや、仮想ディレクトリやApp_Codeディレクトリ に対し、ASPNETユーザに権限は付与されていますか? これはIISマネージャにて設定するものでしょうか? 明示的に作業をして権限を与えた、というようなことはしておりません。 > IISの「ASP.NET バージョン」ですが、仮想ディレクトリだけではなく、仮想ディレクトリより上位にあるフォルダや仮想ディレクトリ、 これは問題の仮想ディレクトリに設定してあるフォルダの上位フォルダを仮想ディレクトリに設定してある場合は、ということでよろしいでしょうか? それとも仮想ディレクトリ内に仮想ディレクトリが設定できるのでしょうか? いずれにしても問題ないと思います。 > Webサーバーに対しても同様に「ASP.NET バージョン」を「2.050727」に設定しましたか? 既定のwebサイトに仮想ディレクトリを設定している場合は、「既定のwebサイト」を選択→プロパティ、ということで問題ないでしょうか? 昨日確認した時にはなっていたと思いますが、再度確認いたします。 > 後は、ちょっとしたやり方や対象箇所が間違ってたとか そんな類だと思いますので、ご確認ください。 そうですね。再度一通り確認しながら作業してみます。 >今まで教示した中で設定は設定し終えた後、IISの再起動とかされていますよね? IISの再起動はしています。 以上よろしくお願いいたします。
1つ忘れてました。 Class1は外部DLLなのか、それともApp_Codeに定義しているクラスですか? また、aspxファイルやascxファイルから、Class1を外部DLLを参照させているのであれば、DLLを参照設定した上で、Namespaceプロパティを設定しないとたぶん動かないかもしれません。 <%@ Register TagPrefix="test" Namespace="Class1が定義されているフル名前空間(Ex:SampleProjet.Test1)" Assembly="Class1のDLL名" %> いずれにしても、問題のソースコードがどうなっているのか公開して頂かないと、回答もまばらになってしまいます。 正確な回答を欲しいのであれば、ソースコードを補足情報としてUPしてください。 宜しくお願いします。
お礼
早速のご回答ありがとうございます。 動作のテストをしているだけのため、ソースというのもおこがましいのですが、詳細を記載させていただきます。 ≪作業内容≫ 1.visual web developer 2008にて新規サイトを作成 2.default.aspxファイルの追加、App_Codeというフォルダを作成し、その中にclass1.vbファイルを追加 3.default.aspxにボタンを追加+ボタンのクリックイベント内に 'dim test as New class1' という記述を追加 --------------------------------------------------- ●default.aspx <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form> </body> </html> ●default.vb Partial Class _Default Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim test As New Class1 End Sub End Class ●class1.vb Imports Microsoft.VisualBasic Public Class Class1 End Class ------------------------ 以上です。 > そもそもClass1という型をApp_Codeの配下に定義していない? これは単純に追加するという意味ではないのでしょうか? > Class1へのパスが通っていない (Dim test As New [Projectで設定している名前空間名].Class1 にするか、もしくは、Class1を参照するためのImportsが定義されていない) なるほど。この辺を全く理解していないようです。 >Class1は外部DLLなのか、それともApp_Codeに定義しているクラスですか? App_Codeに定義しているクラスになると思うのですが、この辺りに関しても回答できるほどの知識がない状態です。 申し訳ございません。 ちょっと調べてみます。
・単純に、Class1を定義しているソースファイルをリリースし忘れている ・そもそもClass1という型をApp_Codeの配下に定義していない? ・Class1へのパスが通っていない (Dim test As New [Projectで設定している名前空間名].Class1 にするか、もしくは、Class1を参照するためのImportsが定義されていない) ・IISのASP.NETの稼動バージョン設定がASP.NET 2.0になっていない 上記のいずれかしかありませんので、見直してみてください。
お礼
度々ご回答ありがとうございます。 早速試させていただきました。 ・IISのASP.NETの稼動バージョン設定がASP.NET 2.0になっていない →問題ありませんでした。 ・C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i →実行しました。インストールされましたが、実行したところ駄目でした。 ・App_Codeに書いた、Class1.vb のソースファイルにNewメソッドを追加してください →追加しましたが、実行したところ駄目でした。 解決できませんでしたが、本当にありがとうございました。 ちょっと何か根本的な部分が間違っているのかもしれません。