Kilka dni temu musiałem opublikować aplikację która korzystała z bardzo prymitywnej bazy danych, zdecydowałem się na SQL CE jako, że wszystko mam już in place i nic nie musiałem dodatkowo robić.

Z SQL Lite sprawa jest prosta, ściągamy wersję dla .NET i tworzymy strukturę katalogów jak opisane zostało to tutaj.

Z SQL CE było podobnie, w VS 2010 za pomocą jednej magicznej opcji wszystko, co potrzebowaliśmy trafiało w odpowiednie miejsce:

Dodanie potrzebnych dllek dla SQL CE z poziomu VS 2012

W VS 2012, niestety opcja ta została usunięta, więc bardzo łatwo jest człowiek wstanie zapomnieć, o niezbędnych dllkach. Robi Web Deploy na jeden serwer i wszystko śmiga, robi na drugi i nic nie śmiga. A że to dwa view i jedno query to nawet logowania nie ma.

Po kilku magicznych zabiegach w końcu udało mi się dotrzeć do informacji:

Unable to load the native components of SQL Server Compact corresponding to the ADO.NET provider of version 8482.

Install the correct version of SQL Server Compact. Refer to KB article 974247 for more details.

I wtedy mnie olśniło. Dokładnie wiedziałem czego brakuje, ale za nic w świecie nie udawało mi się do tego dobrać. Po kilku próbach w końcu znalazłem odpowiednie dllki i w końcu deploy się udał.

Więc ku pamięci, zobaczcie jaką dllkę macie w referencjach w projekcie – System.Data.SqlServerCe (upewnijcie się, że ma Copy Local ustawione na true) może być 64 jak i 32 bitowa, w opcjach jest informacja gdzie ona się znajduje, otwórzcie ten folder, przejdźcie na folder wyżej, wejdźcie do Private i z stamtąd skopiujcie foldery amd64 i x86 (ale NIE kopiujcie System.Data.SqlServerCe.dll) i wklejcie je do katalogu bin waszego web projektu.

W VS w Solution Explorer zaznaczcie opcję pokazywania wszystkich folderów, i w folderze bin zaznaczcie amd64 i x86 i zróbcie na nich Include in Project.

Teraz Web Deploy nie będzie wam straszny.

Nigdy nie pomyślałbym o tym, że z taką prostą rzeczą może być taki problem, i że taki produkt MSowy, który miał pomóc w właśnie takim małym projektom, raczej powoduje iż nie mam ochoty z niego więcej korzystać! Dobrze, że Webio ma SQL CE zainstalowany i takimi rzeczami nie należy się tam przejmować, z Azure jednak, to już inna historia :)

Tyle czasu mi to z zżarło, że aż stworzyłem swojego pierwszego mema:

Lets Create SQL CE! And see how dev struggle with web deploy! hahaha
Jak wspomóc programistów…

4 KOMENTARZE

  1. Również spotkałem się z tym błędem. Trzeba przyznać, że wprowadzenie dwóch różnych wersji tej samej biblioteki dll: 4.0.0.0 i 4.0.0.1 w zależności od tego, czy robimy “private deploy” jest delikatnie mówiąc mylące.

    Podzielę się również niewyjaśnioną ciekawostką dot. tego komunikatu błędu: zaobserwowałem sytuacje gdy pojawia się on dopiero po upływie pewnego czasu od uruchomienia web aplikacji, ok 15 – 45 minut w zależności od hostingu. Przed upływem tego czasu aplikacja działa w 100% poprawnie. Stwierdzone na Azure web sites i somee.com. Może jakieś sugestie?

Comments are closed.