问题描述
我有一个 .NET 5 控制台应用程序,我按照 documentation '.NET 5:使用目标框架名字对象选项'。这意味着我的项目文件目前看起来像这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows10.0.18362</TargetFramework>
</PropertyGroup>
</Project>
然后我尝试使用 new Geolocator().GetGeopositionAsync()
访问 Location Api,它按预期工作。
据我了解,某些 UWP API 仅在我的应用程序具有包标识时才能使用。因此,我创建了一个应用程序打包项目,该项目将我的控制台应用程序引用为应用程序。我按照 documentation 将整个项目打包为 msix 包。现在效果很好,我仍然可以按预期访问当前的地理位置。
但是,我按照 documentation 在 UWP 中设置地理围栏,一旦我尝试注册地理围栏甚至为触发的地理围栏注册事件处理程序,我就会得到一个
One or more errors occurred. (Access is denied. (0x80070005 (E_ACCESSDENIED)))
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
<DeviceCapability Name="location"/>
</Capabilities>
在我尝试设置地理围栏或注册事件处理程序之前,我总是调用 await Geolocator.RequestAccessAsync()
并且只有在此方法每次都返回 Allowed 时才继续执行操作。这意味着这个 question 的答案对我没有帮助。
是否有可能确保我定义能力的方式没有任何问题?例如,有没有办法在运行时检查我的能力?到目前为止,我没有找到有关该主题的任何内容。 或者我的主要假设是否存在问题,即只要我的控制台应用程序有一个包 ID,因为它被打包为 msix,我就可以访问像地理围栏这样的功能,否则我将无法访问这些功能?
在检查我可以通过调用 await Geolocator.RequestAccessAsync()
访问该位置后,例如,我尝试执行以下代码:
GeofenceMonitor.Current.GeofenceStateChanged += this.OnGeofenceStateChanged;
并立即收到异常。
编辑:我现在也尝试在 UWP 应用中使用相同的代码。在那里,它就像一个魅力,我注意到当执行 RequestLocation
时我收到一个弹出窗口,要求我授予应用程序访问该位置的权限。我的控制台应用程序中从未收到过类似的弹出窗口。我认为这可能是因为缺少 UI 线程。
我现在还尝试使用 WPF 应用程序而不是控制台应用程序来测试是否缺少 UI 线程可能是问题所在。但是,我在 WPF 应用程序(当然也打包为 .msix)中遇到了与控制台应用程序中相同的问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)