Публикация проекта ASP.NET с SQL Server Compact, подводные камни - Андрей Моряков

Публикация проекта ASP.NET с SQL Server Compact, подводные камни

Добавлено: 28 Января 2018 в 06:34,  Категория: ASP.NET

Написав какой либо сайт c использованием технологии ASP.NET и SQL Server Compact в качестве СУБД он может работать на вашей локальной машине, но это необязательно должно быть верно после публикации проекта на хостинге.

Задача/challenge

Заставить удаленный сервер работать с базой данных

SQL Server Compact SQL Server Compact.

Не обязательно, но могут возникнуть ошибки с разным содержанием например с таким:

Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8876. Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.

Или таким:

Cannot open '[youthostpath]\cgid\App_Data\datebase.sdf'. Provider 'System.Data.SqlServerCe.3.5' not installed.

Решение/solution

1. Первое, что мы можем попытаться сделать - это добавить необходимые ссылки в папку bin опубликованного сайта - то есть напрямую на хостинг.

Когда вы создаете локальную базу данных с расширением sdf, я говорю о SQL Server Compact, Visual Studio автоматически добавляет необходимые ссылки

В свойствах этой сборки необходимо установить значения параметра "Копировать локально" в значение true. В итоге после публикации сайта, данная сборка копируется в папку bin нашего опубликованного проекта. При попытке запуска в таком случае может возникнуть ошибка. Ошибка может возникнуть по тому, что серверу требуются дополнительные библиотеки, так как архитектура сервера может иметь свою специфику. Где найти эти библиотеки? Они могут располагаться по следующему пути:

C:\Program Files\Microsoft SQL Server Compact Edition\v4.0\Private\x86

C:\Program Files\Microsoft SQL Server Compact Edition\v4.0<span class="hljs-keyword">Private\amd64

Выбираем в зависимости от того, что нужно вам. копируем от туда все файлы и копируем в папку bin на сервере.


В идеале, после этого, сайт должен корректно работать, если ошибки остаются то есть ещё один рецепт.

Шаг 2/Step 2

Добавим следующие теги

<configuration>

<system.data>

<span class="hljs-tag">&lt;<span class="hljs-title">DbProviderFactories</span>&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-title">remove</span> <span class="hljs-attribute">invariant</span>=<span class="hljs-value">"System.Data.SqlServerCe.3.5"</span>/&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-title">add</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"Microsoft SQL Server Compact Data Provider"</span> <span class="hljs-attribute">invariant</span>=<span class="hljs-value">"System.Data.SqlServerCe.3.5"</span> <span class="hljs-attribute">description</span>=<span class="hljs-value">".NET            Framework Data Provider for Microsoft SQL Server Compact"</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"System.Data.SqlServerCe.SqlCeProviderFactory,                System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"</span>/&gt;</span>

<span class="hljs-tag">&lt;/<span class="hljs-title">DbProviderFactories</span>&gt;</span>

</system.data>


**... и ещё**

```xml
 <span class="hljs-tag">&lt;<span class="hljs-title">runtime</span>&gt;</span>

  <span class="hljs-tag">&lt;<span class="hljs-title">assemblyBinding</span> <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">"urn:schemas-microsoft-com:asm.v1"</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-title">dependentAssembly</span>&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-title">assemblyIdentity</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"System.Data.SqlServerCe"</span> <span class="hljs-attribute">publicKeyToken</span>=<span class="hljs-value">"89845dcd8080cc91"</span> <span class="hljs-attribute">culture</span>=<span class="hljs-value">"neutral"</span>/&gt;</span>

      <span class="hljs-tag">&lt;<span class="hljs-title">bindingRedirect</span> <span class="hljs-attribute">oldVersion</span>=<span class="hljs-value">"0.0.0.0-65535.65535.65535.65535"</span> <span class="hljs-attribute">newVersion</span>=<span class="hljs-value">"4.0.0.0"</span>/&gt;</span>

    <span class="hljs-tag">&lt;/<span class="hljs-title">dependentAssembly</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-title">qualifyAssembly</span> <span class="hljs-attribute">partialName</span>=<span class="hljs-value">"System.Data.SqlServerCe"</span> <span class="hljs-attribute">fullName</span>=<span class="hljs-value">"System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"</span>/&gt;</span>

  <span class="hljs-tag">&lt;/<span class="hljs-title">assemblyBinding</span>&gt;</span>

<span class="hljs-tag">&lt;/<span class="hljs-title">runtime</span>&gt;</span>
</code></pre>
<p style="font-size:16pt; color:green"> Шаг 3/Step 3 | Меняем свойства проекта./ Let's to change project properties</p>
<p>Меняем в свойствах проекта конечную платформу с Any PC на x86. Может помочь. Но 1й способ уже должен решить все проблемы!</p>
<blockquote>
<p>Вывод.
Задача и решение в этой статье, в принципе являются вполне логичными и относящиеся к вещам - &quot;само собой разумеющимся&quot;. Но иногда это может сбить с толку, и подтолкнуть перейти, даже с небольшими проектами,  на полноценный SQL Server или другу СУБД :),</p>
</blockquote>

Комментарии ()