web-dev-qa-db-ja.com

ADODBCouldはアセンブリから型 'ADODB.FieldsToInternalFieldsMarshaler'をロードできませんでした

私はこのようなADOBD.Recordsetオブジェクトを読み込もうとしています(初めてなので、「noobness」を許してください:D):

Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
foreach (var category in categories.Fields) // here is where I get the exception
{
   // ...
}

ListAll呼び出しは正常に機能します。オブジェクトでQuickWatchを実行することで確認したいくつかのデータでRecordsetを取得します。しかし、コードがcategory.Fieldsに到達すると、次の例外が発生します。

アセンブリ 'TestCOMCalls、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null'からタイプ 'ADODB.FieldsToInternalFieldsMarshaler'をロードできませんでした。

私はこのエラーをグーグルで検索しました(または「ADODB.FieldsToInternalFieldsMarshaler」だけで問題を解決するのに役立つものを見つけることができませんでした)。

参照がありませんか?通常の参照の他に、これをプロジェクトに追加しました:

ADODB Microsoft ActiveX Data Objects 2.5 Library C:\ WINDOWS\Assembly\GAC\ADODB\7.0.3300.0__b03f5f7f11d50a3a\ADODB.dll

私が言ったように、私はこれまでこれをやったことがありませんが、少しグーグルすることで、これをしている人たち(object.Fieldsでforeach)を見ることができ、彼らのために機能しているようです。

どんな助けや指示も大歓迎です:)

ありがとう!

23
Wagner da Silva

わかりました、これを行う方法を考えました:

Presentation.Category categorySvc = new Presentation.Category();
ADODB.Recordset categories = categorySvc.ListAll("BE", "DUE", "EN", 128);
categories.MoveFirst();
while(!categories.EOF)
{
    var fields = ((dynamic)categories).Fields;
    for (int i = 0; i < fields.Count; i++)
    {
        var field = fields[i];
        var name = field.Name;
        var value = field.Value;
        // ...
    }
    categories.MoveNext();
}
1
Wagner da Silva

プロジェクトのプロパティではなく、個々の参照にあります。ソリューションエクスプローラーウィンドウで(プロジェクトの下にある)[参照]を開き、問題の参照をクリックします。プロパティウィンドウには、(相互参照の)埋め込み相互運用機能タイプのオプションがあります。

Visual BAsic 2010の場合:

Embed Interop Typesをオフにするには:

プロジェクトメニュー>すべてのファイルを表示、ソリューションエクスプローラー:>参照:> ADODB> Interofタイプの埋め込み= False。 Microsoft.Office.Interop.Access> Interofタイプの埋め込み= False

これで公開できるようになり、次の場所にもADODBが表示されます。[プロジェクトメニュー]> [プロジェクトのプロパティ…公開]タブ> [アプリケーションファイル]

40
Bob

解決済み:

ソリューションエクスプローラー->すべてのファイルを表示(メニュー項目)->リファレンス-> Adodb->(プロパティ)-> Embed Interop Types-> False。

12
Sushant Rath

この質問で私が見つけたことをここで確認してください。私はあなたのものを参照しましたが、それでもADODBを機能させることができませんでした。

追加する小さなもの:

SolutionExplorer->すべてのファイルを表示します。 ADODBの場合:-埋め込み... = False; -ローカルをコピー= True。

7
AndyCODE

VS 2013でも同じ問題が発生しました。その解決策は、参照に移動してADODBを選択することです。プロパティで、Embed Interof types = Trueと表示され、それをfalseに変更します。

5
Peter Mankge

一時ファイルをクリアするこの問題が発生しました(VS 2017)。この例外の解決策は、変更する必要がありますSolution Explorer > References > adodb > "Then Right click and choose properties" > Embed Interop Types, set "True" to "False"

2
Saan