专用部署与集中部署 (SQL Server Compact)
可以通过 SQL Server Compact 的集中部署或专用部署来部署使用 SQL Server Compact 4.0 生成的托管应用程序。在集中部署中,SQL Server Compact 通过使用安装程序可执行文件安装在计算机上。在专用部署中,SQL Server Compact 二进制文件放在应用程序文件夹中。以这种方法进行 SQL Server Compact 的专用部署也称为 SQL Server Compact 的 XCOPY 部署。
通过集中部署,应用程序使用安装在全局程序集缓存 (GAC) 中的 SQL Server Compact 托管程序集(System.Data.SqlServerCe.dll 和 System.Data.SqlserverCe.Entity.dll)和中心位置(即 %Program Files%\Microsoft SQL Server Compact Edition\v4.0)中的 SQL Server Compact 本机组件。如果安装了 SQL Server Compact 4.0 的更高版本/更新,则使用 SQL Server Compact 的集中部署的应用程序在下一次运行时,将使用 SQL Server Compact 4.0 的更新版本。集中部署的一个可能缺点是 SQL Server Compact 4.0 只能由具有管理员特权的用户安装在计算机上。(这是因为,要在 GAC 中安装程序集和注册本机组件,这些特权是必需的。)如果使用 ClickOnce 技术部署应用程序,并且在安装过程中将 SQL Server Compact 4.0 集中部署为一个先决条件,则安装可能会失败,因为用户缺少安装 SQL Server Compact 4.0 所需的特权。
通过专用部署,应用程序使用自己的 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 程序集。如果需要更新随应用程序部署的 SQL Server Compact 程序集,则开发人员必须使用其中包含必需的更新的 SQL Server Compact 4.0 版本重新生成应用程序,然后重新发布它。
安装
SQL Server Compact 4.0 在 32 位和 64 位操作系统上的安装行为如下所述:
SQL Server Compact 4.0 |
操作系统 |
---|---|
32 位 |
|
32 位 |
成功 |
64 位 |
错误 |
下面是安装的托管和本机程序集:
**托管程序集:**它们安装在 %Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private 位置中:
System.Data.SqlServerCe.dll
System.Data.SqlServerCe.Entity.dll
**本机程序集:**它们安装在 %Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private\x86 和 %Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private\amd64 中,但 sqlceoledb40.dll 除外,其位置是 %Program Files&\Microsoft SQL Server Compact Edition\v4.0。
sqlceca40.dll
sqlcecompact40.dll
sqlceer40EN.dll
sqlceme40.dll
sqlceoledb40.dll
sqlceqp40.dll
sqlcese40.dll
除了上述程序集之外,对于 Microsoft Visual C++ 2008 运行时库 (CRT) 还有一个程序集和一个清单:
msvcr90.dll
Microsoft.VC90.CRT.manifest
更新和专用部署
专用部署的问题之一是 CLR 默认情况下从 GAC 加载程序集。因此,当 GAC 中存在旧版本的 SQL Server Compact 时,很难将更新推送到以专用方式部署的 SQL Server Compact 程序集,因为 CLR 将继续从 GAC 中加载 SQL Server Compact 程序集。仅当 CLR 加载的程序集版本与 GAC 中的程序集版本不同并且已使用部署在 GAC 中的程序集编译应用程序时,才会发生 CLR 加载以专用方式部署的程序集的情况。
在 SQL Server Compact 4.0 中,已通过以下方法解决了此问题:
针对所有软件更新(包括修补程序、Service Pack、关键修补程序以及安全更新)递增程序集版本号。程序集版本以如下方式递增:4.0.0.1、4.0.0.2、4.0.0.3 等等。
在以下文件夹中安装托管程序集的其他副本(System.Data.SqlServerCe.dll 和 System.Data.SqlServerCe.Entity.dll):%Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private。
按以下方式应用更新:
对于定期修补程序,将更新应用于这两个托管程序集之一或两者的所有副本;然而,仅对位于 Private 文件夹下的程序集的副本更新程序集版本。这确保对于非关键更新,开发计算机上 Private 文件夹中的程序集比安装在 GAC 中的程序集具有更高的版本号。这也确保对于在已应用更新的计算机上使用专用部署的应用程序而言,CLR 将继续从应用程序的路径中加载 SQL Server Compact 4.0 程序集(因为 GAC 中程序集的版本号不会更改)。
对于安全更新、Service Pack 和关键更新,将更新应用于这两个托管程序集的所有副本,并对所有这些副本更新程序集版本。此外,更新发布方策略,以确保将所有低版本的程序集自动重定向到更高版本。这可确保对于应用更新的计算机而言,CLR 对于所有 SQL Server Compact 4.0 应用程序都将从 GACX 中加载托管程序集;包括那些使用专用部署的应用程序。
开发使用专用部署的应用程序
要开发使用 SQL Server Compact 4.0 的专用部署的桌面应用程序:
确保更新对于开发计算机上的 SQL Server Compact 4.0 是最新的。
在 Visual Studio 中的**“添加引用”**对话框中,通过浏览到 %Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private 文件夹,将对于两个 SQL Server Compact 托管程序集的任何引用添加到您的项目中。(对于使用集中部署的应用程序,这些引用应从 .NET 选项卡添加。)
将任何必需的本机库添加到项目。应通过浏览到 %Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private\x86 文件夹、%Program Files%\Microsoft SQL Server Compact Edition\v4.0\Private\amd64 文件夹或同时浏览到这两者来添加这些库。从中添加本机库的文件夹取决于您开发应用程序所针对的平台(x86、x64 或**“任何 CPU”**)。
至少,必须添加以下本机程序集:
sqlceer40EN.dll
sqlceme40.dll
sqlceqp40.dll
sqlcese40.dll
所有本机组件都会在专用文件夹本身找到一个位置。为便于管理和使用,针对 x86 和 amd64 平台的本机组件的文件夹结构与目录结构在安装程序中是相同的。
备注
64 位 SQL Server Compact 4.0 安装程序是一种全含的安装程序。它将在计算机上安装 32 位组件、64 位组件和非特定于体系结构的组件。32 位和 64 位安装程序包括针对专用部署的任何一种体系结构的本机二进制文件。因此,若要在使用 32 位开发环境时为 64 位计算机生成 SQL Server Compact 4.0 应用程序,您无需解压缩任何 64 位本机程序集。您只需从 %Program files%\Microsoft SQL Server Compact Edition\v4.0\Private\amd64 文件夹选择 64 位本机二进制文件。
确保将上面添加的托管程序集和本机库复制到内部版本输出中。
有关生成桌面应用程序的详细信息,请参阅为桌面生成应用程序 (SQL Server Compact)。