Статьи

Частное развертывание SQL Server Compact 3.5 с пакетом обновления 2 (SP2)

Информация, найденная в официальной документации , не очень обширна, и этот пост надеется расширить информацию, найденную там. Я уже писал в блоге о частном развертывании с SQL Server Compact 4.0, и здесь есть обзорный пост. 

Для SQL Server Compact 3.5 с пакетом обновления 2 (SP2) требуется следующее программное обеспечение:

ОС должна быть Windows XP SP3 или выше:

Для приложений, ориентированных на .NET 3.5 SP1, дополнительное программное обеспечение не требуется.

Для приложений, ориентированных на .NET 4.0, требуется либо .NET Framework 3.5 SP1, либо распространяемый VC ++ 2005 SP1 (для x86 и / или x64).

Убедитесь, что среда выполнения 3.5 SP2 установлена ​​правильно, на компьютерах с архитектурой x64 необходимо установить среды выполнения как x86, так и x64.

Предположим, что вышеуказанные требования выполнены (обратите внимание, что Windows 7 включает .NET 3.5 SP1). Итак, что еще нужно — давайте создадим консольное приложение и узнаем! Наша цель — создать приложение, которое будет работать без уже установленного SQL Server Compact 3.5 с пакетом обновления 2 (SP2) в системах x64 и x86. Обратите внимание, что приведенные ниже инструкции работают независимо от того, нацелено ли ваше приложение на «x86» (32-битный .NET Framework на всех платформах, «любой процессор» (32- или 64-битный .NET Framework) или x64 (64-битный Framework). исключительно).

В Visual Studio создайте новый проект консоли:

образ

Теперь мы должны включить неуправляемые файлы среды выполнения SQL Server Compact C ++, каждый набор файлов в свою собственную папку, которые зависят от платформы. Поэтому создайте в проекте 2 папки: одну с именем x86 для 32-битных файлов и одну с именем AMD64 (не x64!) Для 64-битных файлов.
ПРИМЕЧАНИЕ. Это соглашение, основанное на значении переменной среды PROCESSOR_ARCHITECTURE, является специальной функцией SQL Server Compact .

образ 

Теперь мы должны найти необходимые файлы. Если вы используете 32-битный компьютер, на вашем компьютере установлены только 32-битные файлы, и вы должны вручную извлечь 64-битные файлы в папку, как описано здесь . Я использую (как и большинство других) машину x64, и на ней уже установлены самые последние файлы для обеих платформ.

Все файлы в папке «C: \ Program Files» — это 64-разрядные файлы, а файлы в папке «C: \ Program Files (x86)» — это все 32-разрядные файлы (в системах x64).

Нужно добавить следующие файлы:
sqlceca35.dll
sqlcecompact35.dll
sqlceer35EN.dll
sqlceme35.dll
sqlceoledb35.dll
sqlceqp35.dll
sqlcese35.dll

Итак, добавьте файлы из C: \ Program Files \ Microsoft SQL Server Compact Edition \ v3.5 в папку проекта AMD64, используя Add, Existing Item (обязательно измените фильтр на «Все файлы»):

образ

Убедитесь, что все файлы включены в Build Action = Content и Copy to Output Directory = Copy Always:

образ

Затем добавьте файлы из C: \ Program Files (x86) \ Microsoft SQL Server Compact Edition \ v3.5 в папку проекта x86 таким же образом:

образ

Наконец, добавьте поставщика ADO.NET (System.Data.SqlServerCe.dll) в корневой каталог проекта, добавьте этот файл из папки C: \ Program Files \ Microsoft SQL Server Compact Edition \ v3.5 \ Private (!). Также установите этот файл как Content, Copy Always:

образ

Теперь добавьте ссылку на провайдера ADO.NET в корневой папке проекта:

образ

Убедитесь, что версия (сборочная версия) 3.5.1.50, которая указывает, что это правильный файл:

образ

Теперь соберите проект и посмотрите в папку bin / debug, чтобы убедиться, что все файлы скопированы с выходными данными проекта. Теперь вы можете проверить, работает ли частное развертывание, удалив среды выполнения 3.5 SP2 или на ПК без установленных сред.

Если вы используете ADO.NET «Classic» (без LINQ to SQL или Entity Framework), это все, что вам нужно для частного развертывания. Если вы инициализируете LINQ to SQL DataContext с помощью объекта SqlCeConnection, как я здесь опишу , дополнительная настройка не требуется.

Если вы зависите от API DbProvider (как LINQ to SQL и Entity Framework), вы должны добавить следующее в app.config вашего проекта:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add 
        name="Microsoft SQL Server Compact Data Provider 3.5" 
        invariant="System.Data.SqlServerCe.3.5" 
        description=".NET Framework Data Provider for Microsoft SQL Server Compact" 
        type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.50, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
      />
    </DbProviderFactories>
  </system.data>
</configuration>

Если вы используете Entity Framework, вы должны добавить C: \ Program Files \ Microsoft SQL Server Compact Edition \ v3.5 \ Private \ System.Data.SqlServerCe.Entity.dll в корневой каталог вашего проекта в качестве содержимого и иметь такую ​​конфигурацию, как следующие (как описано командой SQL Compact здесь )

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SqlServerCe.3.5" />
      <add name="Microsoft SQL Server Compact Data Provider 3.5" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.50, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly xmlns="">
        <assemblyIdentity name="System.Data.SqlServerCe" publicKe

yToken="89845dcd8080cc91" culture="neutral" />
        <bindingRedirect oldVersion="3.5.1.0-3.5.1.50" newVersion="3.5.1.50" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Надеюсь, это было полезно!