web-dev-qa-db-ja.com

エラーBC30002-タイプXXXが定義されていません

OK、これは私を夢中にさせ始めます。私はasp.netwebappを持っています。非常に単純で、ほとんどのコードは.aspx.vbにあり、いくつかのクラスはApp_Codeにあります。

今日だけ発生し始めた問題(ほとんどのコードはすでに記述されていますが)は、たまに次のエラーメッセージが表示されることです。

エラーBC30002:タイプ「XXX」が定義されていません

このエラーは、App_Codeフォルダー内のファイルを変更するたびに発生します。編集:OK、これは私がしばらく何も触れずにページを更新した場合にも起こります。私はまだこのエラーをトリガーする方法を正確に理解しようとしています。

何も触れずに少し待ってからページを更新すると機能しますが、非常に面倒です。

そこで少し検索しましたが、インポートがない以外は何も表示されませんでした。何か案が ?

9
thomasb

私は問題を見つけたと思います。

私のコードはそのようなものでした:

Imports CMS

Sub Whatever()
    Dim a as new Arbo.MyObject() ' Arbo is a namespace inside CMS
    Dim b as new Util.MyOtherObject() ' Util is a namespace inside Util
End Sub

なぜそのように書いたのかはわかりませんが、名前空間全体を呼び出さずに、または名前空間全体をインポートせずにクラスを呼び出していたことがエラーの原因でした。

私はそれをこのように書き直しました:

Imports CMS.Arbo
Imports CMS.Util 

Sub Whatever()
    Dim a as new MyObject()
    Dim b as new MyOtherObject()
End Sub

そして今それは動作します...

6
thomasb

コンパイル前の問題のように聞こえます。特に、エラーが発生してから待機すると、エラーが消えると言っているためです。 ASP.NETは、アプリケーションを動的にコンパイルしている途中であるか、型をさまざまなアセンブリにコンパイルしている可能性があります。

動的コンパイルでは、異なるコードビハインドファイルが同じアセンブリにコンパイルされるとは限りません。そのため、参照しているタイプは、プリコンパイルされたアセンブリ内で解決できない場合があります。

「@Reference」ディレクティブを使用して、ページとタイプを含むファイルを同じアセンブリにコンパイルする必要があることをランタイムに示してみてください。

@リファレンス-MSDN

5
HaveThunk

これは、古いソリューションに新しいプロジェクトを追加した後に発生しました。他の「古い」プロジェクトのフレームワークと一致するようにターゲットフレームワークを下げたところ、エラーはなくなりました。

5
Sjoerd Franken

ウェブサイトが起動するたびに発生するようです(アプリはapp_codeに触れるたびにリサイクルされ、おそらくIIS X分間操作がないとウェブサイトをシャットダウンするように構成されています)。

私はそれがサーバー上で正しいアクセス権を持っていないasp.netワーカープロセスと関係があるに違いありません。そのため、アセンブリをロードしようとして拒否されています。

このリンクを確認してください および表19.3で、ワーカープロセスアカウントが機能するためにアクセスする必要のあるすべてのフォルダーのリストを確認してください。また、仮想ディレクトリ内のすべてのファイルとフォルダに対する権限を付与することを忘れないでください。

0
user1228

参照が等しい場合は、前にバックアップからvbprojファイルとvbproj.userファイルを置き換えます

0
Wirah