Build Problems with SQLite-WinRT Wrapper - sqlite

I am having trouble getting my app to build for ARM target after adding the SQLite-WinRT database wrapper. I could reproduce this with a simple test app as follows:
(This is done in Visual Studio 2013.)
Create an empty Windows 8.1 universal app (WinRT)
Download SQLite for Windows Phone 8.1 and SQLite for Windows Runtime (Windows 8.1) using Tools/Extensions and Updates. Add them to the respective projects' references.
Using NuGet, add SQLite-WinRT package to each project.
Build for x86 (local machine or phone emulator) -> no problems.
Build for ARM (phone device) -> build error shown below (independent of debug or release builds).
There was a mismatch between the processor architecture of the project being built "ARM" and the processor architecture, "x86", of the implementation file "C:\Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages\Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.dll" for "C:\Users\jr\Documents\Visual Studio 2015\Projects\sqlite-test\packages\Sqlite-Winrt.3.8.7.1\lib\wpa81\SQLiteWinRT.winmd". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and implementation file, or choose a winmd file with an implementation file that has a processor architecture which matches the targeted processor architecture of your project.
I posted a small test project here (Windows Phone 8.1 empty project, added SQLite, added SQLite-WinRT via NuGet).

Go to project properties open build tab and set target platform to ARM
Edit
You have added WinRt sqlite. it is buid on x86 and when you want to build it on ARM process Architecture it cannot build you need to remove WinRTSQlite dll than your project will work fine. Here is Code
Hope this helps

One workaround for the problems with the NuGet package is adding the sqlite-winrt sources to your phone or universal app.
install SQLite for Windows Phone 8.1 (and for universal also Windows Runtime (Windows 8.1)) in Tools -> Extensions and Updates if not done already
add references to the respective projects
download the sources for the sqlite-winrt wrapper
copy the SQLiteWinRTPhone81(RT) (and SQLiteWinRT81 if needed) folders to your solution
add the projects to your solution in Visual Studio (right-click on solution -> Add -> Existing Project)
add references to the respective projects
edit the references for the sqlite-winrt project(s) to point to the correct version of SQLite (right-click project -> Properties -> Common Porperties -> References): add a reference to the current SQLite version in your project and remove the old reference
build your solution

I have downloaded your project and on the references i have found that you are using SQLite-WinRT and sqlite for windows phone 8.1, you don't need both.
as soon as you remove SQLite-WinRT your project start compiling.
EDIT:
inside a universal app you have to add only the right references, if is a phone project just add sqlite for windows phone 8.1, instead on the windows 8.1 app add only the SQLite-WinRT

Related

How do I create an msixbundle for a UWP project?

I have two xamarin forms projects that currently only utilize the UWP platform. One creates msixbundles when publishing and the other creates appxbundles when publishing. I can't seem to find any key difference between the Package.appxmanifest or the uwp project files that would cause this. I would like to make them both produce msixbundles. Does anyone know the key to creating msixbundles vs appxbundles?
The apps targeting Windows 1809 and newer are automatically packaged bundled as msix/msixbundle. And here is official release note.
We added support for creating .MSIX packages for both the Universal
Windows Platform projects, as well as in the Windows Application
Packaging Project template. To create an .MSIX package, the minimum
version of your application must be the latest Windows 10 SDK (build
17763).

How to Publish a Winforms App with SQLite using ClickOnce

I have a small C# WinForms app developed using Visual Studio Community 2015 on Windows 8.1 on a 64-bit computer and targeting .Net Framework 4.5.2 and Any CPU | Prefer 32-bit. (I also tried targeting just x86).
I used NuGet Package Manager to install Entity Framework 6.3.1 and System.Data.SQLite 1.0.101 (which installed System.Data.SQLite, System.Data.SQLite.Core, System.Data.SQLite.EF6, and System.Data.SQLite.Linq), though System.Data.SQLite.Core doesn't show in the project references.
The app runs fine in the VS debugger, but the ClickOnce published version triggers an Unable to load SQLite.Interop.dll exception when installed and run on the same computer.
I don't see any references to SQLite.Interop.dll in Solution Explorer. There are such dlls in both the x86 and x64 Debug folders of the project, but not in the Release folder which is empty. When I try to add a reference to either the x86 or x64 dlls, I get an error saying they could not be added (i.e. inaccessible or not a valid assembly or COM component). All 3 of the SQLite dlls in the project references have Copy Local = true.
I'm guessing the SQLite NuGet install failed to set some project property/reference, but I don't know what that might be, why, and how to get around it. I'm not even sure who's responsible: SQLite, NuGet, Visual Studio, me?
Thanks for any help. Steve
I JUST found a working solution. Read the comment outlined https://github.com/oysteinkrog/SQLite.Net-PCL/issues/158#issuecomment-88163499 <- there
Important piece:
I created new PROJECT folders for x86 and x64. I created the project folders in the project that click-once deploys. That is, the project that produces the executable. I copied the interop files from the bin folder into the new solution folders
Just include x86 and x64 folders in your solition explorer. Then set Copy to local=true. I will create folders with sqlite.interop.dll
Had a similar issue, resolved it by simly creating the x64 and x86 folder on my startup project as follows:
I am using a separate class library project to communicate with the sqlite db. This is where I copied the sqlite.interop.dll files from

Using SQLite-Net Extensions in winRT

I would like to use the SQLite-Net Extensions library in my winRT project.
https://bitbucket.org/twincoders/sqlite-net-extensions
To support sqlite in my Windows 8.1 App I've currently installed SQLite for Windows Runtime (Windows 8.1) as VS Extension and sqlite-net via NuGet.
Extension: http://visualstudiogallery.msdn.microsoft.com/1d04f82f-2fe9-4727-a2f9-a2db127ddc9a
sqlite: https://www.nuget.org/packages/sqlite-net
To get it working I tried to download the source and build it with the sqlite libs we can use for winRT. In order to add a reference to SQLite for Windows Runtime I need to change the target to Windows 8.1 only. Doing that will result in many errors like: "The name 'BindingsFlags' does not exist in the current context" "Instance argument: cannot convert from 'System.Type' to 'System.Reflection.MemberInfo'"
I've also tried to link the SQLite-Net-PCL directly from my project but in the end it's the same situation.
I really need to add relationships to my sqlite database and would be very very thankful for every help I can get!
Attached you can find a screenshot of my VS2013 where I've changed the references of SQLiteNetExtensions to use the required winRT libraries.
Many many thanks in advance for any help you can give me!
Following steps work for me without the need to download the source and possible compilation error:
(I have the following assumptions: I only target Windows 8.1 [As of yours] and I use Visual Studio Premium 2013 Update 3)
In Visual Studio go to Tools-Extensions & updates-online section and look for sqlite. This package will contain
required SQLite Binaries.
Add a Reference to SQLite for Windows Run-time in your project Reference
Add a Reference to Microsoft Visual C++ Run-time package
In Nuget package manager console run "Install-package sqlite-net"
In Nuget package manager console run "Install-Package SQLiteNetExtensions"
Now you will have a project which Targets Windows 8.1 and also has reference to both SQLiteNetExtensions. Above steps was originally recommended in : Using SQLite in a Windows Store App
Below is the screenshot of the SQLiteDemo project references downloaded from the link I mentioned earlier which also has reference to SQLiteNetExtensions :

TFS 2012 Builds and SQLite for WinRT

Working on a Windows Store App which is utilising SQLite for WinRT. Local builds work fine due to the installation of the VS2012 Extension SQLite for Windows Runtime.
This adds 2 SDK references into the project config which points to the local file system (not part of the solution). But TFS 2012 Build freaks out saying that the build is broken as it can't find the SQLite and C++ dlls.
I am using the MS hosted TFS so installing the SDKs on the build server is not an option.
Any ideas?
I've run across similar issues when trying to build WinRT projects using the TFS Hosted Build Server.
In the end, this article was the winner:
http://blog.novotny.org/2012/03/24/how-to-use-extension-sdks-per-project/
The solution is to put the libraries in version control in a “libs” directory. NuGet does this for existing libraries in a \packages directory at the solution-level; it does not yet support Extension SDKs. The good news is that both Visual Studio 11 and MSBuild already support defining additional locations for Extension SDK’s by overriding the SDKReferenceDirectoryRoot variable. The key is to add the override after the element near the end of the csproj/vbproj file like this:
<PropertyGroup>
<SDKReferenceDirectoryRoot>$(SolutionDir)\libs;$(SDKReferenceDirectoryRoot)</SDKReferenceDirectoryRoot>
</PropertyGroup>
With that in place, you can then put your Extension SDK files alongside your solution:
\libs\Windows\v8.0\ExtensionSDKs[SDKName][SDKVersion]\…
Once there, it will be available in the Visual Studio Add References dialog like any other Extension SDK.
Now my SDK references don't need to be manually installed on developers machines or build servers.

Sqlite database restrictions in windows store apps

I have some issues with Sq lite. I read a Microsoft article
In that site it is mentioning as "When you create a new C# or VB Windows Store project in Visual Studio, it supports all architectures (x86, x64 and ARM) by default. But since you added Sq Lite to the project, you can’t build one package that targets all architectures. You have to build one target for each. Select Build|Configuration Manager and select x86, x64 or ARM from the Platform drop-down list."
My application is Newspaper app developed using C# for windows tablet. Can i build for all processors.?
Yes you can, the only downside is that you must compile three different times your app, to support the ARM, X86 and X&4 architectures.
This can done easily if you configure your configuration manager with the different architectures ;)
Check this link on How to: Create and Edit Configurations

Resources