将UWP库加载到.NET Framework应用程序中
本文关键字:Framework 应用程序 NET UWP 加载 | 更新日期: 2023-09-27 18:28:45
有许多文章(codeproject、blog1、blog2、forum)将WinRT库用于Windows8中的.Net Framework控制台应用程序。
我在Windows 10中用UWP尝试过。但没能成功。我努力编译,没有出错,但在运行时出现了BadImageFormatException
。
这就是我所做的。
- 使用.NET Framework 4.6.1目标创建控制台应用程序
- 编辑.csproj文件以添加
<TargetPlatformVersion>10.0</TargetPlatformVersion>
- 参考以下三个库。
- c: ''Program Files(x86)''Windows Kits''10''UnionMetadata''Windows.winmd(显示Windows Runtime 1.4)
- c: ''Program Files(x86)''Reference Assemblys''Microsoft''Framework.NETCore''v4.5.1 ''System.Runtime.WindowsRuntime.dll(显示4.0.10.0)
- c: ''Program Files(x86)''Reference Assemblys''Microsoft''Framework.NETCore''v4.5.1 ''System.Runtime.InteropServices.WindowsRuntime.dll(显示4.0.0.0)
与Windows8示例相反,引用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
。所以,调用库本身似乎很好。但CCD_ 5引起CCD_ 6。
异常消息的详细信息如下。
引发异常:mscorlib.dll 中的"System.BadImageFormatException"
其他信息:无法加载文件或程序集"System.Runtime.WindowsRuntime,版本=4.0.10.0,区域性=中性,PublicKeyToken=b77a5c561934e089"或其依赖项之一。不应加载引用程序集以执行。它们只能在"仅反射"加载程序上下文中加载。(HRESULT异常:0x80131058)
我已经尝试(1)将生成配置更改为x86/x64/AnyCPU(2),并将所有引用的复制本地设置为true,但发生了相同的错误。
在我看来,这个异常是说System.Runtime.WindowsRuntime
试图在内部加载一些依赖库,但我不知道它是什么。
以下是在这里工作的步骤,请注意您的步骤之间的细微差异:
步骤1:添加到.csproj文件
<PropertyGroup>
<TargetPlatformVersion>10.0</TargetPlatformVersion>
</PropertyGroup>
步骤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)
它在桌面中不可用,桌面中只支持此处引用的类型。
我遇到了这个错误,我将Microsoft.NETCore.UniversalWindowsPlatform的版本从"5.0.0"升级到"5.2.2",我的程序开始运行