MvvmLight, PCL and System.Runtime - windows-phone-8

I have a VS2012 solution that contains a Portable Class Library that targets .NET 4.5, Silverlight 5 and Windows Phone 8. This PCL also references MvvmLight (PCL). I then have a Windows Phone 8 project which references this PCL. For the WP8 project I loaded the MvvmLight (PCL) NuGet Package which loaded MvvmLight, MvvmLight.Extras as well as MvvmLight.Platform.WP8.
But, when I compile the WP8 project it complains that I have an indirect reference to "System.Runtime, Version=2.5.19.0". This is true because the PCL project exposes a view model that has the ViewModelBase class as a base class, which in turn requires the System.Runtime.dll.
If I reference the platform specific versions of MvvmLight in the WP8 project, i.e. the MvvmLight NuGet package, then I also have to reference the Microsoft.Bcl.Build package and when I do that I get load more errors referring to Microsoft.Threading.Tasks.Extensions.
I have tried adding the System.Runtime.dll from the Microsoft.Bcl directory, but it does not solve the problem.
Is there something I'm missing or not tried?!?

This is an issue where NuGet is adding binding redirects when it shouldn't. Deleting the binding redirects for System.Runtime (and System.Threading.Tasks if it exists) from the app.config in your WP8 project should fix this.

Related

Calling a C# method from C++ in Windows Phone 8 (for real)

I'm using a game engine which generates a native C++ project (DirectX) for a Windows Phone 8 app. To integrate such things as in-app-billing however I need to call a C# method everytime a specific C++ method is triggered in the engine. There is a SO-thread named calling a C# method from C++ in WP8 which apparently is just the other way around: "a C# based app actually calling a C++ method".
Where I'm stuck right now is that I created a "Visual C++ -> Windows Phone Runtime Component" with a C++/CX public ref class sealed using Visual Studio 2012 Express for Windows Phone. This references a .winmd file of a "Visual C# -> Windows Store Class Library" that has the project properties set to "Windows Runtime Component". Interestingly I had to create this in Visual Studio 2012 Express for Windows 8 (NOT Windows Phone), because VS for WP8 doesnt provide an option for generating a .winmd file. Compiling my game I get the following error message:
No implementation file was provided for the .winmd file '...\InAppBilling.winmd'. To enable generation of registration information in the app manifest, specify the 'Implementation' metadata on the winmd reference item in the project file.
How do I call a C# method from within C++? I don't need any fancy stuff like DLLs, inheritance, delegates etc. Just a plain static call that works, everything else will be handled in C# anyway.
This is only possible if you create a XAML and Direct3D app. In that case you can call from C++ to C# using the Windows Runtime method in the other SO question.
As it is not possible to create a C# Windows Runtime component on the phone (unlike for a Windows Store app), it isn't possible to call a C# method from a native C++ project.

How to package a Windows Runtime component for distribution?

I have built a WinRT component (.winmd) for use by both JavaScript and XAML Windows Store apps. When including and referencing the loose .winmd file output in a JavaScript client, I see this build warning:
Microsoft.AppXPackage.Targets(808,9): warning APPX1707: No implementation file was provided for the .winmd file 'myRuntimeComponent.winmd'. To generate registration information in the app manifest, specify the 'Implementation' metadata on the .winmd reference item in the project file.
I can't find any documentation on this error or how to include implementation metadata.
When running the JavaScript client, this exception is thrown when a class method exported from the .winmd is called:
0x80040154 - JavaScript runtime error: Class not registered
Note that I am referencing the loose .winmd file in the client application project, rather than referencing the Visual Studio project that builds the .winmd. My use case is distributing the .winmd output, not the full source for the .winmd component - source distribution is not an option.
Also note that when the Windows Runtime component is referenced as a project reference, the JavaScript client builds and runs correctly. The C# XAML client runs correctly with either a project reference or a reference to the loose .winmd.
It seems as if some registration information is not being generated in the client application build when a loose .winmd is referenced.
How can I build and distribute a loose Windows Runtime component for use by both JavaScript and managed clients?
A WinRT component built with C# or VB produces a .winmd that contains both metadata and implementation. A component built with C++ provides separate .winmd and .dll files, and the DLL is what contains the details to register the component.
Apparently, as the warning indicates, you need to edit the project file with something like the following to point to the DLL:
<Reference Include="component">
<HintPath>component.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
<Implementation>component.dll</Implementation>
</Reference>
Alternatively you might want to look into Extension SDKs. See the below link for how to package your component as an easy to consume Extension SDK in VS:
http://msdn.microsoft.com/en-us/library/jj127119.aspx

Found conflicts between different versions of the same dependent assembly.MVC3 -> MVC4 / EF4 -> EF5

The question is how to resolve conflicts between versions of assemblies in my project that was upgraded to MVC4 and EF5?
The problem is manifest in the fact that my controllers and models can include System.Data.Objects, but now my views.
I am using MVC 4, my project was upgraded from MVC 3.
Entity Framework is version 5.
I have a controller that is able to use objectcontext from System.Data.Objects.
My Usings:
using System.Data.Objects;
using System.Data.Entity;
When I try to include the using in the view form System.Data.Objects, I get :
CS0234: The type or namespace name 'Objects' does not exist in the namespace 'System.Data' (are you missing an assembly reference?)
I am targeting .net 4.5
My Build Displays this message:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1561,5): warning MSB3247: Found conflicts between different versions of the same dependent assembly.
You can build your solution in diagnostic mode to get more detailed information about the error.
Open the VS Options dialog (Tools > Options), navigate to the "Projects and Solutions" node and select "Build and Run". Change the MS Build project build output verbosity to Diagnostic.
Have a look here.
If you look at the build message, it states the 4.0 version of the .net framework is referenced... Is there a setting in your project file or web/app.config specifying a conflicting version of the .net framework?
Are you familiar with fuslog? you can set it up to log all assembly bindings that .net is doing while running your application. You should then be able to see detailed information on what is getting bound when. If you still can't figure it out, you can always do a binding redirect on that .dll in the web.config.
http://msdn.microsoft.com/en-us/library/eftw1fys.aspx -- binding redirects
http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.71).aspx -- fusion log viewer
Set up fusion logger and take a look at what the output is. If you don't get an answer from that, try the binding redirect (which would give you at least a temporary solution).
In the directory I was publishing to, there was a folder named aspnet_client. I moved it (instead of deleting it), republished, and it worked. I'm not sure why that folder decided to give me trouble out of the blue.

Manifest references file 'Bing.Maps.dll' which is not part of the payload

Error 1 Manifest references file 'Bing.Maps.dll' which is not part of the payload. C:\Users\xxx\Desktop\xxx\Applicationxx\Applicationxx\Package.appxmanifest Application7
I added this into a existing Metro application and its giving me that error, anyone has solution to it?
Go to the properties of the project and under Build, you will see Platform Target. Choose either x64 or x86 instead of Any CPU and it should be solved.
~Guo Hong
To correctly reference Bing Maps for a Metro app...
Go to: Project -> Add Reference -> Windows -> Extensions
Now, select both the "Bing Maps for ..." and also "Microsoft Visual C++ Runtime Package"
If you don't select the 2nd package, things will seem to be fine until you try to actually deploy your app.

VerifyError: Error #1014: class could not be found

I'm developing AS3 project using Flash Builder 4.5 (also with library Away3D 4.0 and Flex 4.5.1 SDK).
Also, I add my own SWC library, which I compile previously into my project.
It works find if I import class in my SWC library, however I want my swf run in a stand-alone flash player 11.
I follow this tutorial:
http://help.adobe.com/en_US/flashbuilder/using/WSe4e4b720da9dedb5-4dd43be212e8f90c222-7ffb.html
Now, I could run my app in a flash player 11, but I got an error in run time:
VerifyError: Error #1014: XXX class could not be found
And XXX is my class in SWC library. How should I fix this?
Merged into code means this, in project properties -> Flex Build Path -> Library Path -> Framework Linkage. Framework lingage has two options Merged into code and RSL. Chose Merged into code. This should solve your problem.
We had this problem when trying to build a project using a Native Extension.
Classes within the NE weren't being found at runtime, but were accessible in Flash Builder.
It turned out that by default the .ANE file wasn't copied to the device.
To fix this, change the following project property:
ActionScript Build Packaging -> Apple iOS -> Native Extensions -> Check 'Package' for the ANE
No idea why it wasn't included by default. When you uncheck 'Package' you get a warning telling you that it may cause runtime issues!
In my case, we had a nested reference to the same library which needed to load before the other library also using it. This fix can be accomplished by unchecking the 'Automatically determine library ordering based on dependencies' and moving the library up in the chain of Build path libraries. Flash Builder was unable to determine the correct order base on dependencies because we had 2 different versions of the same library. The error would only happen during run time.
I had this problem after installing AIR 3.9 and trying to upgrade a project.
It was also saying there was an RSL error, before throwing a succession of #1014 errors.
It worked after I set the textLayout.swc link type in Advanced ActionScript Settings to 'merged into code' instead of the default (RSL)
Hope this helps!
Since I landed on this page searching for this error message and none of the above solutions worked for me, here's how I finally managed to work around it:
It seems that this error happens particularly when you include old libraries that were compiled with the old compiler but compile your app with the new one. Unfortunately the error sometimes fires and when you compile again it doesn't; at other times it works fine in the debug version but then it fails in the release.
What worked for me is to include dummy objects in your main app which are instances of the class that the verify error complains about:
import some.classpath.to.TheClassThatFailsOnVerify;
function YourMainApp(){
var dummy:TheClassThatFailsOnVerify = new TheClassThatFailsOnVerify ();
}
At least in my case the errors only fired for classes that were not used directly in the app but only internally in the swc library code, so by having the dummy objects in the main app I force Flash Builder to include those classes in the compilation.
In some cases you might have to first find the swc that contains the class in question since it's not part of the library swc you use but it's again a library that that swc uses itself.