There are a number of articles(codeproject, blog1, blog2, forum) to use WinRT library into .Net Framework console application in Windows 8.
I tried it with UWP in Windows 10. But failed to make it. I struggled to compile without error, but it occurred BadImageFormatException
in runtime.
This is what I did.
- Create Console application with .NET Framework 4.6.1 target.
- Edit .csproj file to add
<TargetPlatformVersion>10.0</TargetPlatformVersion>
- Reference three libraries as below.
- c:Program Files (x86)Windows Kits10UnionMetadataWindows.winmd (shows Windows Runtime 1.4)
- c:Program Files (x86)Reference AssembliesMicrosoftFramework.NETCorev4.5.1System.Runtime.WindowsRuntime.dll (shows 4.0.10.0)
- c:Program Files (x86)Reference AssembliesMicrosoftFramework.NETCorev4.5.1System.Runtime.InteropServices.WindowsRuntime.dll (shows 4.0.0.0)
In contrary to Windows 8 examples, there is error when System.Runtime.dll
is referenced.
The code is as below. Note that the code is from Microsoft forum.
class Program
{
static void Main(string[] args)
{
Geolocator locator = new Geolocator();
var status = Geolocator.RequestAccessAsync();
if (status != null)
{
Console.WriteLine("not null");
Task.Run(async () =>
{
Geoposition pos = await locator.GetGeopositionAsync();
Console.WriteLine(pos.Coordinate.Accuracy);
});
}
else
{
Console.WriteLine("null");
}
Console.ReadLine();
}
Compilation is OK, and not null
is displayed in console. So, invocation of library itself seems fine. But GetGeopositionAsync
cause BadImageFormatException
.
The exception message detail is as below.
Exception thrown: 'System.BadImageFormatException' in mscorlib.dll
Additional information: Could not load file or assembly 'System.Runtime.WindowsRuntime, Version=4.0.10.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)
I already tried (1) to change build configuration to x86/x64/AnyCPU (2) and to set Copy Local to true to all references, but same error occurred.
In my opinion, this exception is saying System.Runtime.WindowsRuntime
tries to load some dependent library internally but I don't know what it is.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…