OK、これは私を夢中にさせ始めます。私はasp.netwebappを持っています。非常に単純で、ほとんどのコードは.aspx.vbにあり、いくつかのクラスはApp_Codeにあります。
今日だけ発生し始めた問題(ほとんどのコードはすでに記述されていますが)は、たまに次のエラーメッセージが表示されることです。
エラーBC30002:タイプ「XXX」が定義されていません
このエラーは、App_Codeフォルダー内のファイルを変更するたびに発生します。編集:OK、これは私がしばらく何も触れずにページを更新した場合にも起こります。私はまだこのエラーをトリガーする方法を正確に理解しようとしています。
何も触れずに少し待ってからページを更新すると機能しますが、非常に面倒です。
そこで少し検索しましたが、インポートがない以外は何も表示されませんでした。何か案が ?
私は問題を見つけたと思います。
私のコードはそのようなものでした:
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
そして今それは動作します...
コンパイル前の問題のように聞こえます。特に、エラーが発生してから待機すると、エラーが消えると言っているためです。 ASP.NETは、アプリケーションを動的にコンパイルしている途中であるか、型をさまざまなアセンブリにコンパイルしている可能性があります。
動的コンパイルでは、異なるコードビハインドファイルが同じアセンブリにコンパイルされるとは限りません。そのため、参照しているタイプは、プリコンパイルされたアセンブリ内で解決できない場合があります。
「@Reference」ディレクティブを使用して、ページとタイプを含むファイルを同じアセンブリにコンパイルする必要があることをランタイムに示してみてください。
これは、古いソリューションに新しいプロジェクトを追加した後に発生しました。他の「古い」プロジェクトのフレームワークと一致するようにターゲットフレームワークを下げたところ、エラーはなくなりました。
ウェブサイトが起動するたびに発生するようです(アプリはapp_codeに触れるたびにリサイクルされ、おそらくIIS X分間操作がないとウェブサイトをシャットダウンするように構成されています)。
私はそれがサーバー上で正しいアクセス権を持っていないasp.netワーカープロセスと関係があるに違いありません。そのため、アセンブリをロードしようとして拒否されています。
このリンクを確認してください および表19.3で、ワーカープロセスアカウントが機能するためにアクセスする必要のあるすべてのフォルダーのリストを確認してください。また、仮想ディレクトリ内のすべてのファイルとフォルダに対する権限を付与することを忘れないでください。
参照が等しい場合は、前にバックアップからvbprojファイルとvbproj.userファイルを置き換えます