1

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 ファイルを使用する必要があることです。

4

5 に答える 5

1

次のファイルをアプリケーション フォルダーに追加します。

  • sqlceca35.dll
  • sqlcecompact35.dll
  • sqlceer35E.dll
  • sqlceme35.dll
  • sqlceoledb35.dll
  • sqlceqp35.dll
  • sqlcese35.dll
  • System.Data.SqlServerCe.dll

その後、それは動作します。

これは、ターゲット マシンに sql server ce 3.5 を明示的にインストールしていない場合に必要です (これは、私が考えるほとんどの展開の場合です)。

于 2008-10-28T09:33:05.923 に答える
0

foo.dll.configファイルを追加して、DLLと一緒に存在することを確認できます。DLLにコードが含まれていることを確認して、DLLがディスク上のどこにあるかを判断し、同じ場所から構成を読み取る必要があります。

幸運を!

于 2008-10-27T22:38:54.963 に答える
0

C++ プログラムから呼び出すメソッドには LINQ を使用せず、SqlCeConnection、SqlCeCommand などを使用します。

于 2009-11-27T11:06:37.960 に答える
0

これは明らかに、実行中のプログラムに App.config ファイルを追加できないためです。

なぜだめですか?さて、Visual Studio は構成ファイルを自動的に作成して名前を変更し、出力ディレクトリに移動しませんが.exe.config、C++ アプリケーションと一緒にファイルを試しましたか?

于 2008-11-06T15:44:18.023 に答える
0

また、GAC の System.Data.SqlServerCe.dll のファイル バージョンが間違っていて、cmd コマンド プロンプトから GAC の dll を置き換えた例も確認しました。

ファイルがフォルダーに存在する必要があるという点は真実です-GACが複数のバージョンを持っていることで混乱しない限り

于 2008-11-20T14:58:13.500 に答える