【VB.NET】例外がスローされました: ‘System.MissingMemberException’ (Microsoft.VisualBasic.dll の中)

Visual Studio で VB.NET のアプリを F5 で開始すると、出力ウィンドウ(またはイミディエイトウィンドウ)に下記のメッセージが出た。

例外がスローされました: ‘System.MissingMemberException’ (Microsoft.VisualBasic.dll の中)

エラーの意味は「存在しない、または public として宣言されていないクラスメンバーに動的にアクセスしようとした」ということ(Microsoft Docs より引用)。

 

実は、このメッセージはかなり以前から出ていたんだけど、アプリの動作に問題が無かったのであまり気にしてなかった。

それに「Microsoft.VisualBasic.dll の中」で発生している例外エラーということは Microsoft.VisualBasic.dll のソースコードの問題だと解釈していたので、「自分が書いたコードのせいではない」「直しようがない」と思っていた。

 

しかしその解釈は間違っていたらしい(少なくとも今回の場合は)。(今回は)どうやら Microsoft.VisualBasic.dll の外に書かれているコードのせいで例外が発生しているようだ。

 

というわけで該当箇所を探し始めると間もなく発見。

冒頭のエラーメッセージの原因はこんなコードだった。

Dim name As String =  ""

Try
    name = ctrl.Name 'TypeOf ctrl Is Object
Catch ex As Exception
End Try

ctrl の型は Object 型。

ctrl に .Name プロパティが含まれているかどうか分からないので Try ~ Catch で例外エラーを補足してアプリケーションが止まらないようにしているコードだった。

従ってアプリケーションの動作自体に問題は無かったものの、実際はここで例外が発生したときに出力ウィンドウ(またはイミディエイトウィンドウ)にそのメッセージが出ていたのだと分かった。

 

前述のコードをそのまま放っておいても実害はないが、もう少しスマートなやり方があると分かったので下記のように修正しておいた。

If ctrl.GetType.GetProperty("Name") IsNot Nothing Then
    name = ctrl.Name
End If

これで冒頭のエラーメッセージが出なくなってスッキリ!

購読する
通知を受け取る対象
guest
0 Comments
Newest
Oldest
Inline Feedbacks
View all comments