私は、MS Access データベースに接続し、そこに格納されているデータベース オブジェクトの一部を使用できるようにする必要がある C# アプリケーションに取り組んでいます。
後で Access 関連のコードに小さな変更を加える必要があるかもしれない一部の人々は、主に VBA と DAO に精通しているため、(Microsoft.Office.Interop.Access.Dao PIA 経由で) ACEDAO.dll を使用することにしました。構文をできるだけ親しみやすくするためです。
上記の PIA を参照すると、必要な Access 固有の型を Visual Studio 2015 で簡単に使用でき、アプリケーションは完全に適切にコンパイルされます。ただし、デバッグプロセスを開始すると、すぐに例外が発生します。
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in mscorlib.dll
Additional information: Retrieving the COM class factory for component with CLSID {CD7791B9-43FD-42C5-AE42-8DD2811F0419} failed due to the following error: 80040154 class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Office 2013 をインストールしていますが、参照されている DLL (ACEDAO.DLL) が登録されていないようです。Microsoft から Access Runtime をダウンロードしてインストールするだけで、これを修正できました。その後、対応する .dll が登録され、アプリケーションが正常に動作します。
問題は、Access ランタイムのインストールに管理者権限が必要であることです。これは、クライアント PC にとって現実的なオプションではありません。アプリケーションを実行する必要があるすべての PC には、私の開発者マシンと同じバージョンの Office がインストールされており、ACEDAO.dll はプログラム ファイルの中にありますが、登録されていません... このライブラリを登録せずに使用することは可能ですか? ?
Office のインストール フォルダーにある ACEDAO.dll を参照すると、"isolated" プロパティを true に設定できました。これにより、ビルド時にかなりの数の警告が表示されましたが (COM 参照 'Microsoft.Office.Interop.Access.Dao' を分離する問題...)、バイナリ フォルダーに dll をコンパイルしてコピーし、マニフェストを作成しましたが、それでも動作しません。ライブラリが登録されていなくても機能します (mscorlib.dll からの ecxception 0x8007013D、メッセージ テキストがありません)...
ACEDAO ライブラリをターゲット マシンに登録せずに使用できるかどうか、およびどのように使用できるかについて何か考えはありますか?