Windows Universal App SQLlite in Portable DLL - windows-phone-8.1

My project structure is defined like this:
LIB Com basic communication, (requests and responses)
LIB Com.BackgroundTask background task that will fetch new messages from server
LIB Com.Mediator background logic that will handle every exchange of information and interaction between Com and the ViewModel
LIB Model all Models for the Project, also the Databases should be defined here.
LIB Settings App settings.
Windows App Views/Controls for Windows
Windows Phone App Views/Controls for Windows Phone
Shared Basic App logic, Mediator init, ViewModels
the Problem is that you cannot reference the SQLLite extension in the (Portable) LIB Model but this is essentialy for the project structure to work. Otherwise the BackgroundTask would never be able to update the Database, am i right?

You can refer SQLite in a portable class library project using Portable Class Library for SQLite. This project has been initiated by Microsoft Open Technologies, Inc. working with the community.
This portable class library for SQLite available as NuGet package
simplifies the installation and development experience for .NET
developers by providing a single interface across Windows Phone,
Windows Store and .NET Framework 4.5.
With this solution .NET developers can develop against one portable
class library and do not have to worry about what assembly is loaded.
Drawback: Targeting x64 platform architecture is not supported at the moment.
Targets supported: x86, and AnyCPU (with "Prefer 32-bit" option marked).
Pre-requisites:
1) The developer visits http://sqlite.org/download.html, and downloads the required precompiled binary for Windows v3.8.5 (http://sqlite.org/2014/sqlite-dll-win32-x86-3080500.zip), extracts the sqlite3.dll file, and adds it as Copy-Always Content to the root folder of the project.
2) In Visual Studio, the developer uses NuGet Packet Manager Console to install the SQLitePCL wrapper package.
Inside the Package Manager Console, type: Install-Package SQLitePCL

Related

Sideloaded app requires package Microsoft.VCLibs.120.00 on my build server

In trying to run integration tests on my windows store app but the sideloading of my test appx file fails with error (0x80073CF3):
Windows cannot install package (my package GUID) because this package depends on another package that could not be found. This package requir
es minimum version 12.0.21005.1 of framework Microsoft.VCLibs.120.00 published by any publisher to install. Provide the framework along with this package..
The same procedure works fine on my dev machine (from powershell).
A Microsoft blog post states:
...In order to facilitate this scenario for sideloaded apps, we have made
the framework packages available here.
After downloading, and extracting the relevant architecture appx file, I installed it via powershell:
Add-AppxPackage "C:\temp\Microsoft.VCLibs.120.00_12.0.21005.1_x86__8wekyb3d8bbwe.appx"

How to use third party dll in windows phone 8.1 application with windows runtime component?

I have created the windows phone 8.1 application in which I want to use third party dll file. That's why I have created windows runtime component for the windows phone project. I have given reference of the runtime component to the windows phone 8.1 application project.
In windows runtime component, I have set the additional Include directory path. Moreover, I have also set the Linker -> Input ->additional dependencies as lib file listing. I have drag drop all dll files in my c# windows phone application main project folder and set build action as content and copy output directory as copy always.
However, I got the following error.
An exception of type 'System.IO.FileNotFoundException' occurred in App1.WindowsPhone.exe but was not handled in user code
I have checkout the following question. But did not resolve it.
How to use a C++ dll in Windows Phone 8.1 XAML App within C++ Runtime Component
I found the answer. All the dependencies has been set properly. There was an issue in the dll file which architecture does not match with the current platform.
After created the build for proper architecture, it works.

Cant use NuGet to add Unity IoC to a portable class library

I am making a Windows Phone 8 application, however because I would like at some point to also publish this application for Windows 8.1 store I made the effort to factor out the application logic into a portable class library. All good so far.
Now being a good boy I want to use an IoC container, unity by preference (since I am familiar with it in desktop and Win Phone 8 only apps)
So here's my problem; the NuGet Unity package will not install into my portable application with this result:
Installing 'Unity 3.0.1304.1'.
Successfully installed 'Unity 3.0.1304.1'.
Adding 'Unity 3.0.1304.1' to Logic.
Uninstalling 'Unity 3.0.1304.1'.
Successfully uninstalled 'Unity 3.0.1304.1'.
Install failed. Rolling back...
Could not install package 'Unity 3.0.1304.1'. You are trying to install this package into a
project that targets 'portable-net45+wp80+win', but the package does not contain any assembly
references or content files that are compatible with that framework. For more information,
contact the package author.
So is there a unity that works with a PCL? or is this just a shortcoming of the NuGet package?
I failed to find any useful documentation on the P&P website to indicate what platforms it is compatible with, but I know it does support WP8 at the least since the NuGet package is quite happy with libraries targeting just that.
Any guidance from the community would be very welcome here I don't want to abandon using a PCL for my app logic if I can avoid it, but if it comes down to a toss up between that and NuGet for package management I will in order to keep the NuGet goodness.
Could this be related to NuGet and Portable Class Libraries - Package doesn't target any framework? that seems more related to making your own NuGet packages for use in your own PCLs.
Unity 3.0.1304.1 does not contain any PCL assemblies so you will not be able to install it into a PCL project using NuGet.
The Unity NuGet package contains assemblies that target the following frameworks:
.NETFramework 4.5
.NETCore 4.5 (Windows Store/WinRT)
Windows Phone 8
You can see these target frameworks if you open the NuGet package into NuGet Package Explorer or download the NuGet package and open it using a program that supports zip files such as 7zip or Windows built-in zip file support.
So your possible options are:
Just use Unity in your main Windows Phone 8 application.
Write your own IOC container.
Use an IOC container that supports PCL projects such as Portable.CommonServiceLocator.
Compile your own PCL version of Unity.
Use a later version of Unity 3.5 since this includes a PCL assembly targeting portable-net45+wp80+win8+MonoAndroid10+MonoTouch10
Updated: 2014-05-11
Unity 3.5 now includes a PCL assembly that targets portable-net45+wp80+win8+MonoAndroid10+MonoTouch10 which will install into a project that targets portable-net45+wp80+win.
There is no Unity for PCL, but you can use Ninject for example.

Does protobuf-net support Windows RT?

Is it possible to use the protobuf-net library in an application that targets Windows RT? I tried adding it via NuGet to my project but I receive this error:
Successfully installed 'protobuf-net 2.0.0.480'.
Successfully uninstalled 'protobuf-net 2.0.0.480'.
Install failed. Rolling back...
Could not install package 'protobuf-net 2.0.0.480'. You are trying to install this package into a project that targets '.NETCore,Version=v4.5', but the package does not contain any assembly references that are compatible with that framework. For more information, contact the package author.
You need a newer version. Version 594 has support for 4.5.
In the package manager console (Tools->Library Package Manager->Package Manager Console) run:
PM> Install-Package protobuf-net -Version 2.0.0.594
Or download it from the project web site.
Yes, the more recent builds have full support for .NETCore (aka "WinRT", "Windows Store Applications", or "Metro", or "Modern UI", or whatever they want to call it today). As Eli notes, you can obtain it by specific version, or you can get it from the google-code download.
Note that for the best performance it is recommended to use "precompile", the new precompiler, because .NETCore has no support for meta-programming: without this, it will be using reflection at runtime, and will not be anywhere near as fast as it can be. This is included in the google-code download.

JavaFX Native libraries

I create a simple Java Map Scene in JavaFX. I put jfxrt.jar into my lib folder in project, but I also need native libraries to use some components: for example glass.dll on Windows and libglass.dylib on MacOsX. I have got few queston:
Where I should add these libliaries? To /rt/?
It is Swing application, and client start it by using Java WebStart. How can I add dependencies to these native libs?
What about x32 / x64 Windows versions? The jfxrt.jar is different for 32bit and 64bit system.
Where I should add these libliaries? To /rt/?
You could place the libraries in ../bin relative to where you have placed jfxrt.jar. Haven't tried it, but I think it will work as that is the directory structure used by the JavaFX distributions.
Embedding the native libs in a Swing app delivered via a webstart package is not a documented deployment option. Instead of doing that, I'd advise checking for JavaFX presence in your Swing app and, if JavaFX is not there launching a browser pointing to the JavaFX runtime download and installation page - the instructions for which are here. For example:
try {
new javafx.util.Pair("a","b"));
} catch (ClassNotFoundException e) {
java.awt.Desktop.getDesktop().browse(new URI("http://www.java.com/en/javafx/"));
}
It is Swing application, and client start it by using Java WebStart. How can I add dependencies to these native libs?
If you app is still in development, and can be targeted for the JavaFX 2.2 release in a couple of months, then you could set the minimum version required for the app to JDK7u6 - which will include JavaFX 2.2 runtime libs - then you wouldn't have to worry about their distribution and the deployment scenarios are much, much simpler.
Not sure if JavaFX 2.1 embedded in Swing deployed via WebStart is supported (or would even work) outside of Windows. You may want to wait for 2.2 for Mac and Linux webstart support for JavaFX applications.
What about x32 / x64 Windows versions? The jfxrt.jar is different for 32bit and 64bit system.
If you app is launched from a browser, then whatever bits the browser has is the bits that are required for JavaFX and Java. Most browsers today (at least under windows) are 32 bits, even if the user has a 64bit OS - so that is something to watch out for. As you are using WebStart, it may not have the browser bit match dependence (in which case you should at least match the bit versions of JavaFX and Java).