专用部署与集中部署 (SQL Server Compact)

可以通过 SQL Server Compact 的集中部署或专用部署来部署使用 SQL Server Compact 3.5 生成的托管应用程序。 在集中部署中,SQL Server Compact 通过使用 Microsoft Windows Installer (MSI) 文件安装在计算机上,并通过复制和安装设备特定的 SQL Server Compact Windows Cabinet (CAB) 文件安装到设备上。在专用部署中,同时将 SQL Server Compact 组件放在计算机和设备上的应用程序文件夹中。以这种方法进行 SQL Server Compact 的专用部署也称为 SQL Server Compact 的 XCOPY 部署。

通过集中部署,应用程序使用安装在全局程序集缓存 (GAC) 中的 SQL Server Compact 托管程序集(System.Data.SqlServerCe.dll 和 System.Data.SqlserverCe.Entity.dll)和在 COM 中注册的 SQL Server Compact 本机组件。 这意味着可以通过 Microsoft Update 集中更新 SQL Server Compact 3.5。 使用 SQL Server Compact 的集中部署的应用程序在下一次运行时,将使用更新后的 SQL Server Compact 3.5 版本。集中部署的一个可能缺点是 SQL Server Compact 3.5 只能由具有管理员特权的用户安装在计算机上。(这是因为,要在 GAC 中安装程序集和注册本机组件,这些特权是必需的。) 如果使用 ClickOnce 技术部署应用程序,并且在安装过程中将 SQL Server Compact 3.5 集中部署为一个先决条件,则安装可能会失败,因为用户缺少安装 SQL Server Compact 3.5 所需的特权。

当进行专用部署时,应用程序使用自己的 SQL Server Compact 托管程序集的本地副本和任何必需的 SQL Server Compact 本机库。当部署应用程序时,这些程序集和本机库与应用程序捆绑在一起,并安装在目标系统上应用程序的文件路径中。如果以专用方式部署的 SQL Server Compact 程序集的版本号高于以集中方式安装在 GAC 中的程序集的版本号,则应用程序使用以专用方式部署的程序集,而不使用以集中方式部署的程序集。如果 GAC 中没有任何 SQL Server Compact 程序集(尚未在目标计算机上集中部署 SQL Server Compact),则应用程序使用其以专用方式部署的程序集。使用专用部署的一个优点是:因为 SQL Server Compact 程序集未安装在 GAC 中且本机组件未向 COM 注册,所以,可以避免在锁定的系统上进行集中部署所面临的潜在问题。但是,专用部署使开发人员承受更大的责任,因为无法集中更新以专用方式部署的 SQL Server Compact 程序集。(通过 Microsoft Update 只能更新集中安装的 SQL Server Compact 3.5 实例。)如果需要更新随应用程序部署的 SQL Server Compact 程序集,则开发人员必须使用其中包含必需的更新的 SQL Server Compact 3.5 版本重新生成应用程序,然后重新发布它。

备注

SQL Server Compact 的关键安全更新将通过 Microsoft Update 提供,甚至是在以专用方法部署 SQL Server Compact 的计算机上。即使在计算机上没有进行 SQL Server Compact 的集中安装,也会发生这些更新(SQL Server Compact 程序集未安装在 GAC 中,并且未注册 SQL Server Compact 本机库)。

桌面应用程序和设备应用程序都支持基于 SQL Server Compact 的应用程序的专用部署和集中部署。

更新和专用部署

专用部署的问题之一是 CLR 默认情况下从 GAC 加载程序集。因此,当 GAC 中存在旧版本的 SQL Server Compact 时,很难将更新推送到以专用方式部署的 SQL Server Compact 程序集,因为 CLR 将继续从 GAC 中加载 SQL Server Compact 程序集。仅当 CLR 加载的程序集版本与 GAC 中的程序集版本不同并且已使用部署在 GAC 中的程序集编译应用程序时,才会发生 CLR 加载以专用方式部署的程序集的情况。

从 SQL Server Compact 3.5 Service Pack 1 (SP1) 开始,已通过以下方法解决了此问题:

  • 针对所有软件更新(包括修补程序、Service Pack、关键修补程序以及安全更新)递增程序集版本号。程序集版本以如下方式递增:3.5.1.0、3.5.1.2、3.5.1.3 等等。

  • 在以下文件夹中安装托管程序集的其他副本(System.Data.SqlServerCe.dll 和 System.Data.SqlServerCe.Entity.dll):%Program Files%\Microsoft SQL Server Compact Edition\v3.5\Private。

按以下方式应用更新:

  • 对于定期修补程序,将更新应用于这两个托管程序集之一或两者的所有副本;然而,仅对位于 Private 文件夹下的程序集的副本更新版本。这确保对于非关键更新,开发计算机上 Private 文件夹中的程序集比安装在 GAC 中的程序集具有更高的版本号。这也确保对于在已应用更新的计算机上使用专用部署的应用程序而言,CLR 将继续从应用程序的路径中加载 SQL Server Compact 3.5 程序集(因为 GAC 中程序集的版本号不会更改)。

  • 对于安全更新、Service Pack 和关键更新,将更新应用于这两个托管程序集的所有副本,并对所有这些副本更新版本。此外,更新发行者策略,以确保将所有低版本的程序集自动重定向到更高版本。这可确保对于应用更新的计算机而言,CLR 对于所有 SQL Server Compact 3.5 应用程序都将从 GACX 中加载托管程序集;包括那些使用专用部署的应用程序。

开发使用专用部署的应用程序

备注

Visual Studio 2010 是用于开发桌面应用程序的首选环境。Visual Studio 2008 SP1 是用于开发智能设备应用程序的首选环境。Visual Studio 2010 不支持开发智能设备应用程序。有关更多信息,请参阅安装开发环境

要开发使用 SQL Server Compact 3.5 的专用部署的桌面应用程序:

  1. 确保更新对于开发计算机上的 SQL Server Compact 3.5 是最新的。

  2. 在 Visual Studio 中的**“添加引用”**对话框中,通过浏览到 %Program Files%\Microsoft SQL Server Compact Edition\v3.5\Private 文件夹,将对于两个 SQL Server Compact 托管程序集的任何引用添加到项目中。(对于使用集中部署的应用程序,这些引用应从 .NET 选项卡添加。)

  3. 将任何必需的本机库添加到项目。应通过浏览到 %Program Files%\Microsoft SQL Server Compact Edition\v3.5 文件夹、%Program Files(x86)%\Microsoft SQL Server Compact Edition\v3.5 文件夹或同时浏览到这两者来添加这些库。从中添加本机库的文件夹取决于您开发应用程序所针对的平台(x86x64 或**“任何 CPU”**)。至少必须添加以下本机程序集:sqlceme35.dll、ssceqp35.dll、sscese35.dll 和 sqlceer35xx.dll。

    备注

    64 位 SQL Server Compact 3.5 本机程序集未安装在 32 位计算机上。若要使用 32 位开发环境生成用于 64 位计算机的 SQL Server Compact 3.5 应用程序,必须从 64 位 SQL Server Compact 3.5 安装程序 (SSCERuntime_x64-ENU.msi) 提取这些程序集。有关详细信息,请参阅如何从 SQL Server Compact 运行时安装程序解压缩 64 位 DLL

  4. 确保将上面添加的托管程序集和本机库复制到内部版本输出中。

有关生成桌面应用程序的详细信息,请参阅为桌面生成应用程序 (SQL Server Compact)

要开发使用 SQL Server Compact 3.5 的专用部署的智能设备应用程序:

  1. 确保更新对于开发计算机上的 SQL Server Compact 3.5 是最新的。

  2. 在 Visual Studio 的**“添加引用”**对话框的 .NET 选项卡中添加对 .NET Compact Framework Data Provider for SQL Server Compact 的引用。这会将 %Program Files%\Microsoft SQL Server Compact Edition\v3.5\Devices 文件夹下的数据访问接口添加到项目中。此步骤对于所有智能设备应用程序是相同的,无论它们使用的是以专用方式部署还是集中部署的 SQL Server Compact 版本。

  3. 将任何必需的本机库添加到项目。应通过浏览到目标平台的适当文件夹来添加这些库:%Program Files%\Microsoft SQL Server Compact Edition\v3.5\Devices\platform\processor 文件夹。至少必须添加以下本机库:sqlceme35.dll、ssceqp35.dll、sscese35.dll 和 sqlceer35xx.dll。

  4. 确保将上面添加的托管程序集和本机库复制到内部版本输出中。

有关生成智能设备应用程序的详细信息,请参阅生成智能设备应用程序 (SQL Server Compact)

请参阅

其他资源

为桌面生成应用程序 (SQL Server Compact)

生成智能设备应用程序 (SQL Server Compact)

部署智能设备应用程序

部署桌面应用程序