当前位置:  开发笔记 > 编程语言 > 正文

将UWP库加载到.NET Framework应用程序中

如何解决《将UWP库加载到.NETFramework应用程序中》经验,为你挑选了1个好方法。

有许多文章(codeproject,blog1,blog2,论坛)将WinRT库用于Windows 8中的.Net Framework控制台应用程序.

我在Windows 10中尝试使用UWP.但未能成功.我努力编译没有错误,但它发生BadImageFormatException在运行时.

这就是我做的.

    使用.NET Framework 4.6.1目标创建控制台应用程序.

    编辑要添加的.csproj文件 10.0

    参考下面的三个库.

    c:\ Program Files(x86)\ Windows Kits\10\UnionMetadata\Windows.winmd(显示Windows运行时1.4)

    c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETCore\v4.5.1\System.Runtime.WindowsRuntime.dll(显示4.0.10.0)

    c:\ Program Files(x86)\ Reference Assemblies\Microsoft\Framework.NETCore\v4.5.1\System.Runtime.InteropServices.WindowsRuntime.dll(显示4.0.0.0)

与Windows 8示例相反,System.Runtime.dll引用时会出错.

代码如下.请注意,该代码来自Microsoft论坛.

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();
    }

编译正常,并not null显示在控制台中.因此,调用库本身似乎很好.但是GetGeopositionAsync原因BadImageFormatException.

异常消息详细信息如下.

抛出异常:mscorlib.dll中的"System.BadImageFormatException"

附加信息:无法加载文件或程序集'System.Runtime.WindowsRuntime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'或其依赖项之一.不应加载引用程序集以执行.它们只能在Reflection-only loader上下文中加载.(HRESULT异常:0x80131058)

我已经尝试(1)将构建配置更改为x86/x64/AnyCPU(2)并将Copy Local设置为true以引用所有引用,但发生了相同的错误.

在我看来,这个例外是System.Runtime.WindowsRuntime试图在内部加载一些依赖库但我不知道它是什么.



1> Aybe..:

以下是在此处工作的步骤,请注意您之间的细微差别:

第1步:添加到.csproj文件

  
    10.0
  

第2步:添加引用

C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd

第3步:添加引用

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll

请注意差异,v4.5而不是v4.5.1,并且没有引用System.Runtime.InteropServices.WindowsRuntime.dll.

这在这里工作正常(Win10,VS2015).

旁注,对Geolocator的调用将失败,无论如何:

This operation is only valid in the context of an app container. (Exception from HRESULT: 0x8007109A)

它不能在桌面内使用,只有桌面支持此类引用的类型.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有