domingo, 26 de abril de 2015

Acessando o SQLite a partir de uma PCL e uma aplicação Windows Phone 8.1

Recentemente precisei acessar o SQLite a partir de uma Portable Class Library, por sua vez acessada por uma aplicação Windows Phone 8.1.

Passei por um bom perrengue até conseguir colocar a coisa toda pra funcionar e por essa razão decidi documentar o passo a passo para a solução final. Segue abaixo:

1) No assembly PCL em que você deseja acessar o SQLite, referencie o pacote NuGet "SQLitePCL.raw_basic". Este pacote fornece acesso ao SQLite sem conter o SQLite em si e portanto é independente de plataforma, podendo ser usado numa PCL. Ele não será usado em tempo de execução, mas permitirá que sua solução compile sem problemas.

2) Ainda no mesmo assembly, referencie o pacote "SQLite-net PCL". Esse pacote é quem fornece a API .NET que você utilizará para acessar o SQLite, como o objeto SQLiteConnection, por exemplo. Internamente, ele acessa o "SQLitePCL.raw" que é o pacote que de fato acessa a 'sqlite3.dll'.

3) No projeto que irá consumir a sua PCL, referencie o pacote NuGet "SQLitePCL.raw". Esse pacote vem com versões específicas para cada plataforma e apenas aquela referente à plataforma do seu projeto será utilizada. É este também o pacote que trás consigo a biblioteca 'sqlite3.dll'.

4) Por alguma razão que não consegui descobrir qual seja, ao compilar e executar o projeto neste ponto, quando tudo já deveria estar funcionando, o runtime informa que a 'sqlite3.dll' não pode ser carregada, mesmo ela estando presente junto aos binários do projeto. A forma como resolvi esse problema foi adicionar, e em seguida remover, uma referência ao pacote oficial do SQLite para Windows Phone 8.1. É necessário remover a referência após adicioná-la pois caso contrário o compilador irá reclamar de duplicidade da biblioteca 'sqlite3.dll', presente nessa extensão, com a outra, disponível no pacote "SQLitePCL.raw". Após esse 'recurso técnico' ser aplicado, tudo parece passar a funcionar sem problemas, mesmo após apagar completamente os binários do projeto e compilar novamente (sem repetir a gambiarra com o pacote oficial).

Escrevi uma breve aplicação para ilustrar essa solução.

Um comentário:

  1. I completely agree with the article that communication skills are necessary, and also, you ought to never overlook them—pay special interest to your communication abilities and customer support. Make yourself find and reach out to customers even after completing the task to be a successful java programming software developer.

    ResponderExcluir