投稿者 しまも  (社会人) 投稿日時 2023/1/14 15:09:37
>機微情報を取り除いて、必要最小限の実験コードにまで縮小した
>サンプルコードを提示してもらえると追跡しやすいのですけれど、難しいですかね。

⇒ありがとうございます。もし見ていただけるならとてもありがたいです。
 ただ、要領がわからなくて……どのようにすればよいでしょうか?
 機微情報にあたるようなものは特にありません。

>プロジェクトのプロパティの[参照設定]タブ内にある「インポートされた名前空間」あるいは
>.vb ファイル先頭に書かれる Imports 宣言によって、.NET の標準ではない
>自作コードの名前空間が追加されていたりはしますか?

上で示したDBBookOperationやDataTableExtensionsとは別のファイルの先頭に、
Imports VocabularyBuilder.Html
と書いているのはあります。「VocabularyBuilder」はソリューション名・プロジェクト名、「Html」は自作クラスです。

>さきほどの修正で
> = Global.ルート名前空間名.DatatableExtensions.MinimumLackedNumber(dtBook, "bookCode")……①
>とすることで呼べるようになったコードを
> = Global.ルート名前空間名.MinimumLackedNumber(dtBook, "bookCode") 'モジュール名省略……②
> = DatatableExtensions.MinimumLackedNumber(dtBook, "bookCode") 'ルート名前空間省略……③
> = MinimumLackedNumber(dtBook, "bookCode") 'メソッド名のみ……④
>に変えてみてください。この中に呼べなくなるパターンはありますか?

すみません、私が
> ⇒◎これでなら動きました!
と言ったのは、①でなく③でした。
改めて①~④を試したところ、すべて呼ぶことができました。

>> 他にもう1つ、DataTableの拡張メソッドがあり、同様のエラーが出ていますが、省略しました。
>そのエラーが、結果的に他のエラーを誘発する要因になっていた可能性も無いとは言えず。

もう一つの拡張メソッドは次のものです。
前の2つと同様に、通常のメソッドとしての呼び出しに変えたら動きました。
    ''' <summary>
    ''' 新旧DataTableを比較し、行・列数や値が違っていたら真を、同じであれば偽を返す。
    ''' </summary>
    <System.Runtime.CompilerServices.Extension>
    Public Function HasValueChanged(dt1 As DataTable, dt2 As DataTable) As Boolean

        Dim rowCount1 As Integer = dt1.Rows.Count
        Dim clmCount1 As Integer = dt1.Columns.Count
        Dim rowCount2 As Integer = dt2.Rows.Count
        If rowCount1 = 0 AndAlso rowCount2 = 0 Then
            Return False
        ElseIf rowCount1 <> dt2.Rows.Count Then
            Return True
        End If

        For rowIndex = 0 To rowCount1 - 1
            For clmIndex = 0 To clmCount1 - 1
                Dim value1 = dt1.Rows(rowIndex).Item(clmIndex).ToString
                Dim value2 = dt2.Rows(rowIndex).Item(clmIndex).ToString
                If value1 <> value2 Then
                    Return True
                End If
            Next
        Next
        Return False
    End Function

>Public Function MinimumLackedNumber において
> Dim max = MaxNumber(dt, column)
>という呼び出しが行われていますが、これを
> Dim max = dt.MaxNumber(column)
>の拡張メソッド構文で呼び出すことはできるのでしょうか。

⇒こちらは拡張メソッド構文で呼び出すことができました。

あともう一つ、フォームデザイナーを開こうとすると、次のようなエラー(?)画面になり、デザイナー画面が開けなくなっていることに気づきました。
実行はできるのですが。フォームはいくつかありますが、一部を除きほとんどのフォームでこのようになります。
そういえば、拡張メソッドのエラーが出るようになったのは、フォームがこのようになってからのような気がします。
(ここに書かれていることは私にはちんぷんかんぷんです……。)

--------------------------------------------------------------------------------
×データが失われる可能性を防ぐため、デザイナーの読み込み前に以下のエラーを解決する必要があります。 
  ×1 個のエラー     無視して続行する     このページが表示されている理由   
×エラー HRESULT E_FAIL が COM コンポーネントの呼び出しから返されました。

 このエラーのインスタンス (1)  
 
1。   コール スタックの表示  
 
場所 System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
場所 Microsoft.VisualStudio.LanguageServices.Implementation.Utilities.Exceptions.ThrowEFail()
場所 Microsoft.VisualStudio.LanguageServices.Implementation.CodeModel.CodeTypeRef.LookupTypeSymbol()
 …(以下続く。投稿文字数制限のためとりあえず省略します)…


このエラーのヘルプ  
MSDN ヘルプ   

このエラーに関するフォーラムの投稿 
MSDN フォーラムでこのエラーに関連する投稿を検索   
--------------------------------------------------------------------------------