5

我正在开发一个设备应用程序,使用与“常规”Sql Server 2005(不是 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.

当我谷歌这个异常时,我主要得到这些建议:

  • 这是安装 Visual Studio 2005 和 2008 时的 Microsoft 错误。通过(重新)安装“SQL Server Compact 3.5 设计工具” http://support.microsoft.com/kb/945371来解决。
    • 我有 Visual Studio 2008 和 2010 - 我的系统上从未安装过 AFAIK 2005。我尝试卸载并重新安装 SQL Server Compact 3.5 设计工具 (\WCU\SSCE\SSCEVSTools-enu.msi)
    • 编辑:由于Devices\Client-directory 是由“用于 Windows Mobile 的 SQL Server Compact 3.5”(SSCEDeviceRuntime-ENU.msi)安装的,我下载并尝试卸载并重新安装基本版本 SP1 和 SP2,但仍然没有部署差异。
  • .cab另一个建议是使用(平台相关) (如sql.wce5.armv4i.CAB)单独安装 SQL 客户端,并将其dbnetlib.dll从例如复制C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v3.5\Devices\Client\wce500\armv4i到持久启动目录(如\Backup\Startup在此 Datalogic 上)。
    如果不尝试,我认为这甚至可能仅限于包括这个平台相关的dbnetlib.dll,因为 System.Data.SqlClient.dll 确实被部署了。
    但这对我来说更像是一种解决方法,部署应该解决这个问题。这项工作的缺点似乎是:
    • 每次冷启动时都会执行安装(甚至可能在热启动时)
    • 通过显式定义向我的项目添加(更多)平台(和版本)依赖项.cab

问题是:您知道正确部署 Visual Studio 的解决方案吗?
另一个问题可能是:您对这项工作有意见吗?

(顺便说一句:DB 连接在 Datalogic Memor WM(Windows Mobile)上运行良好,所以我猜该设备上已经安装了适当的 .NET 库。)

4

1 回答 1

2

Visual Studio generally does a good job of working out what to deploy, but it isn't fullproof. For example if the DLL is linked dynamically then it has no way of knowing that it is required and won't deploy it: it also routinely and silently fails to deploy files to the Windows directory.

I would recommend that you manually deploy the file during development. I generally prefer to do this anyway to make sure I know what has been deployed (the joy of batch files...).

于 2011-07-28T08:58:14.010 回答