C# アプリケーションが SQL CE 3.5 で動作している状況があります。レガシ プログラムがその機能の一部を使用できるようにするために、相互運用機能を使用して C# プログラムから必要な情報を抽出する C++ dll を作成しました。これが機能するには、C# プログラムがデータベースにアクセスする必要があります。非常に複雑なシナリオではありません。
ただし、プライベート インストールで展開しようとすると、いくつかの問題が発生します。 C# プログラムに問題はありません。データベースにアクセスして、問題なく操作できます。
しかし、C# プログラムにデータベースへのアクセスを強制する C++ 相互運用機能を介して C# プログラムの関数にアクセスしようとすると、「...プロバイダー: System.Data.SqlServerCe.3.5 はインストールされていない"。
これは明らかに、実行中のプログラムに App.config ファイルを追加できないためです。
どうすればこれを回避できますか? これを修正する別の方法はありますか?他の形式の SQL CE 3.5 インストール方法は問題外です。したがって、これを機能させる必要があります。
よろしく、
P
編集:
私は SQL CE に対して直接取り組んでいませんが、Linq2SQL を通じて取り組んでいます。すべての dll に構成ファイルを追加しようとしましたが、役に立ちません。実行可能ファイルに app.config がある場合にのみ問題になるようです。
スローされた例外は、プロバイダー System.Data.SqlServerCe.3.5 がインストールされていません。
そして、スタック トレースに従って呼び出される最新の関数は System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Initialize(...) です。
編集 2
展開が機能するために必要なすべてのファイルを追加しました。上で書いたように、SQL CE 3.5 dll を検索する場所を指定する app.config ファイルを含む .net 実行可能ファイルを介して、プログラム dll (Linq 2 Sql を使用) を使用すると機能します。ファイルだけでは展開は機能しません。app.config ファイルが必要です。
問題は、Sql Ce 3.5 dll を探す場所を .net に伝える手段がない C++ 実行可能ファイルを介して dll ファイルを使用する必要があることです。