ClickOnce 先决条件:SQL Server Express 2014 LocalDB 在哪里?

ClickOnce Prerequisites: where is SQL Server Express 2014 LocalDB?

我正在 Visual Studio 2013 社区版中为我的 wpf 应用程序创建一个 clickonce 安装程序。此应用程序使用 localdb。如果我手动安装 sqlserver express 2014 LocalDB,它在目标机器上工作正常。

但我想在我的 clickonce 部署中包含 SQL Server Express 2014 LocalDB 的安装程序。

但是,当我打开先决条件对话框时,只有 SQL Server 2012 Express LocalDB 可用(见图)。我尝试选择“2012”,但它与我的安装程序放入数据文件夹中的 mdf 文件不兼容。

问题是:如何将 SQL Server Express 2014 LocalDB 安装程序作为先决条件包括在内? 有没有一种方法可以将 MSI 文件放在某处并让它起作用?或者坚持使用“2012”会更容易吗?

我也遇到了完全相同的问题。我在 MSDN 论坛上找到了 one potential answer,它似乎对我有用。

总结 link 的答案:您必须为 LocalDB 2014 创建一个 "bootstrapper"。这只是 "Microsoft SDKs directory" 中的一个文件夹,其中包含一些特定的 xml 文件 keys/meta-data 和 eula 文本文件。 link 中的答案提供了这些 xml 文件的内容。重新启动 visual studio 后,"Sql Express 2014 LocalDB" 将与所有其他先决条件一起出现,并且可以添加到 ClickOnce 依赖项中。

正如我在 MSDN forums 上发布的那样,我创建了自己的软件包,因为官方版本不存在。该软件包基本上只是 SqlLocalDB2012 软件包的副本,已更新以指向要下载的新版本 msi 文件。

我已将 boostrapper 包的所有文件放在 GitHub 上,这样人们就不必自己创建文件了。有两个版本,一个用于原始版本,一个用于 SP1 版本。以下是自己创建原始发布版本的步骤:

  1. 创建文件夹SqlLocalDB2014
  2. 在名为 product.xml 的文件夹中创建一个 xml 文件,其中包含以下内容:

    <?xml version="1.0" encoding="utf-8"?>
    <Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper" ProductCode="Microsoft.SqlServer.SqlLocalDB.12.0">
      <InstallChecks>
        <FileCheck
          Property="sqllocaldbVersion"
          FileName="sqlservr.exe"
          SearchPath="Microsoft SQL Server0\LocalDB\Binn"
          SpecialFolder="ProgramFilesFolder"
        />
      </InstallChecks>
    
      <PackageFiles CopyAllPackageFiles="false">
        <PackageFile
          Name="x86\sqllocaldb.msi"
          HomeSite="sqllocaldb_32"
          PublicKey="3082010A0282010100E57C2F2D0CA9EC7AA834E04C3F7F490E0DB615AD1913DE528A26991571A962270737A5833082626C0BA3FD060D171406E6E0ADCC95960A205AA296E1E057303C5D629BC55D890CD034DFD9D8FA35EF11238BC0F9EB4AF439DA2F7110EB11B32C37A370E886173EEF2A46D08EC7B94800A137F1C7C8E7D21E6B4A2AF2C64C1D709F7CC368428E3CED811A52E33E32943D7E18F19BE44B5C11E4D6C3851E6C033073BCC9A8017D9DADD1F573F05B1A7B2F1F8B32BEB38EB53BD9F7FFF35FB3137C139357B8A05E359883A13434F2C5049FB9FE46170C91DFEF0F55F6ECCC39C96165A129EEBE11371BB76E4255C9CC35D152B303709C98349E2936A917195F0BBF0203010001"
        />
        <PackageFile
          Name="x64\sqllocaldb.msi"
          HomeSite="sqllocaldb_64"
          PublicKey="3082010A0282010100E57C2F2D0CA9EC7AA834E04C3F7F490E0DB615AD1913DE528A26991571A962270737A5833082626C0BA3FD060D171406E6E0ADCC95960A205AA296E1E057303C5D629BC55D890CD034DFD9D8FA35EF11238BC0F9EB4AF439DA2F7110EB11B32C37A370E886173EEF2A46D08EC7B94800A137F1C7C8E7D21E6B4A2AF2C64C1D709F7CC368428E3CED811A52E33E32943D7E18F19BE44B5C11E4D6C3851E6C033073BCC9A8017D9DADD1F573F05B1A7B2F1F8B32BEB38EB53BD9F7FFF35FB3137C139357B8A05E359883A13434F2C5049FB9FE46170C91DFEF0F55F6ECCC39C96165A129EEBE11371BB76E4255C9CC35D152B303709C98349E2936A917195F0BBF0203010001"
        />
      </PackageFiles>
    
      <Commands Reboot="Defer">
        <Command PackageFile="x86\sqllocaldb.msi" Arguments="IACCEPTSQLLOCALDBLICENSETERMS=YES" EstimatedInstallSeconds="90">
          <InstallConditions>
            <FailIf Property="VersionNT" Compare="ValueNotExists" String="InvalidPlatformOS" />
            <FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.0.1" String="InvalidPlatformOS" />
            <FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired" />
            <BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="Intel" />
            <BypassIf Property="sqllocaldbVersion" Compare="VersionGreaterThanOrEqualTo" Value="2014.120.2000.8" />
          </InstallConditions>
          <ExitCodes>
            <ExitCode Value="0" Result="Success" />
            <ExitCode Value="1641" Result="SuccessReboot" />
            <ExitCode Value="3010" Result="SuccessReboot" />
            <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
          </ExitCodes>
        </Command>
        <Command PackageFile="x64\sqllocaldb.msi" Arguments="IACCEPTSQLLOCALDBLICENSETERMS=YES" EstimatedInstallSeconds="90">
          <InstallConditions>
            <BypassIf Property="ProcessorArchitecture" Compare="ValueNotEqualTo" Value="amd64" />
            <BypassIf Property="sqllocaldbVersion" Compare="VersionGreaterThanOrEqualTo" Value="2014.120.2000.8" />
          </InstallConditions>
          <ExitCodes>
            <ExitCode Value="0" Result="Success" />
            <ExitCode Value="1641" Result="SuccessReboot" />
            <ExitCode Value="3010" Result="SuccessReboot" />
            <DefaultExitCode Result="Fail" String="GeneralFailure" FormatMessageFromSystem="true" />
          </ExitCodes>
        </Command>
      </Commands>
    </Product>
    
  3. 在该文件夹中创建另一个名为 en 的文件夹并创建另一个名为 package.xml

    的 xml 文件
     <?xml version="1.0" encoding="utf-8"?>
     <Package Name="DisplayName" LicenseAgreement="Eula.txt" Culture="Culture" xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper">
       <PackageFiles>
         <PackageFile Name="Eula.txt" />
       </PackageFiles>
       <Strings>
         <String Name="Culture">en</String>
         <String Name="DisplayName">SQL Server 2014 Express LocalDB</String>
         <String Name="sqllocaldb_32">http://download.microsoft.com/download/E/A/E/EAE6F7FC-767A-4038-A954-49B8B05D04EB/LocalDB%2032BIT/SqlLocalDB.msi</String>
         <String Name="sqllocaldb_64">http://download.microsoft.com/download/E/A/E/EAE6F7FC-767A-4038-A954-49B8B05D04EB/LocalDB%2064BIT/SqlLocalDB.msi</String>
         <String Name="AdminRequired">You do not have the permissions required to install SQL Server 2014 Express LocalDB. Please contact your administrator.</String>
         <String Name="GeneralFailure">An error occurred attempting to install SQL Server 2014 Express LocalDB.</String>
         <String Name="InvalidPlatformOS">The current operating system version does not support SQL Server 2014 Express LocalDB.</String>
         <String Name="InvalidPlatformOSServicePack">The current operating system does not meet Service Pack level requirements for SQL Server 2014 Express LocalDB. Install the most recent Service Pack from the Microsoft download center at http://www.microsoft.com/downloads before continuing setup.</String>
       </Strings>
     </Package>
    
  4. C:\Program Files\Microsoft SQL Server0\License Terms\License_SqlLocalDB_1033.txt文件复制到en文件夹中并重命名为eula.txt.

  5. 要安装包,请将文件夹 SqlLocalDB2014 复制到其他引导程序包所在的位置,例如C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\Bootstrapper\Packages
  6. 您现在应该可以使用 Visual Studio 中的软件包,但是如果您希望从与应用程序相同的位置安装该组件,则需要下载两个 sqllocaldb.msi 文件中指定的 package.xml 文件,并将它们放入 SqlLocalDb2014 文件夹内的 x86x64 文件夹中。
  7. 最后,此包仅适用于英语,但您可以通过为每种语言添加包含 package.xmleula.txt 文件的文件夹来支持多种语言。

The solution for Localdb2017

将 SqlLocalDB2017 文件夹复制到适当的位置,例如:c:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages 并重新启动 Visual Studio。

Here是对Visual Studio中如何添加SqlLocalDB 2014 ClickOnce Bootstraper的简单而完整的说明。 如果你想包含 sqllocalDB 安装文件,你只需从 package.xml 文件中的链接下载它们。但似乎 sqllocaldb_x64.msi 是错误的,它没有安装在 x64 windows 上(在 Windows 7 x64 sp1 上测试)。