5

「通常の」SQLServer2005(Compact DBではない)との接続を使用して、デバイスアプリケーションを開発しています。Windows CE(Datalogic Memor CE)でSqlConnectionを開こうとすると、MissingMethodException:が表示されCan't find PInvoke DLL 'dbnetlib.dll'.ます。

これは展開の問題のようです。私のプロジェクトには次 C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\Client\System.Data.SqlClient.dll のものが含まれています。ファイルSystem.Data.SqlClient.dllはアプリケーションディレクトリにデプロイされますが、の兆候はありませんdbnetlib.dll

この例外をグーグルで検索すると、主に次の提案が表示されます。

  • これは、VisualStudio2005および2008がインストールされている場合のMicrosoftのバグです。'SQL Server Compact 3.5 Design Tools' http://support.microsoft.com/kb/945371を(再)インストールして解決します。
    • VisualStudio2008と2010を使用しています。AFAIK2005はシステムに搭載されていませんでした。SQL Server Compact 3.5デザインツール(\ WCU \ SSCE \ SSCEVSTools-enu.msi)をアンインストールして再インストールしてみました
    • 編集:-ディレクトリは「Devices\ClientSQLServer Compact 3.5 for Windows Mobile」(SSCEDeviceRuntime-ENU.msi)によってインストールされるため、ベースバージョンのSP1とSP2をダウンロードして再インストールしようとしましたが、それでも展開の違いはありませんでした。
  • .cabもう1つの提案は、(プラットフォームに依存する) (などsql.wce5.armv4i.CAB)を使用してSQLクライアントを個別にインストールし、これdbnetlib.dllをたとえば(このDatalogic C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\Client\wce500\armv4iのように)永続的な起動ディレクトリにコピーすることです。System.Data.SqlClient.dllがデプロイされるため、試さずに、 これはこのプラットフォームに依存するものを含めることに限定される可能性があると思います。 しかし、これは私には回避策のように思えます。デプロイメントがこれを処理する必要があります。この回避策の欠点は次のようです。 \Backup\Startup
    dbnetlib.dll
    • インストールは、コールドブートごとに(場合によってはウォームブートでも)実行されます。
    • 明示的に定義することにより、プロジェクトに(より多くの)プラットフォーム(およびバージョン)の依存関係を追加します.cab

問題は、Visual Studioを正しく展開するためのソリューションを知っていますか?
別の質問は次のようになります:この回避策について意見がありますか?

(BTW:DB接続はDatalogic Memor WM(Windows Mobile)で正常に機能するため、適切な.NETライブラリがそのデバイスに既にインストールされていると思います。)

4

1 に答える 1

2

Visual Studioは通常、何を展開するかをうまく処理しますが、完全に保護されているわけではありません。たとえば、DLLが動的にリンクされている場合、DLLが必要であり、デプロイされないことを知る方法がありません。また、Windowsディレクトリへのファイルのデプロイに定期的かつサイレントに失敗します。

開発中にファイルを手動でデプロイすることをお勧めします。私は通常、何がデプロイされているかを確認するために、とにかくこれを行うことを好みます(バッチファイルの喜び...)。

于 2011-07-28T08:58:14.010 に答える