我的Xamarin.Forms解决方案中包含一个UWP项目。在本地运行Windows App Cert Kit时,它顺利通过而没有任何问题。
将我的应用提交到商店时,它通过以下错误导致认证过程失败:
我已验证我的应用程序在“发布”模式下运行,并且已验证我的UWPbuild设置:
我尝试联系Microsoft的聊天支持,但被重定向到输入事件报告,然后我被重定向到只是在论坛上寻求帮助或支付高级技术支持,因此我无法获得有关是否这是否是有效的失败。
根据FindFirstFileEx(https://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx)上的文档,Windows桌面,商店应用程序和Windows Phone似乎都支持它。我的UWP应用已提交,以支持桌面和移动系列,而该系列似乎已包含在此功能的受支持客户端中,因此尚不清楚是什么原因导致了该故障。
关于从这里出发的任何想法?
最佳答案
更新2017年8月14日:现在应该在商店中解决此问题。如果遇到此问题,请尝试重新提交您的应用程序。
这是WACK扫描在商店中运行的方式以及如何与.NET Native集成的问题。
对于某些背景,Windows实际上没有名为FindFirstFileEx
的API-它不存在。 WACK支持的API扫描的工作方式是查看您调用的所有API并验证以下条件之一是否成立:
对于
kernel32.dll!FindFirstFileEx
,WACK会发现软件包中不存在kernel32.dll
,因此必须检查允许列表。允许列表没有提及FindFirstFileEx
,因为它不存在。这是存在的:C:\Program Files (x86)\Windows Kits\10\App Certification Kit>findstr FindFirstFileEx SupportedAPIs-x64.xml
<API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-1-0.dll"/>
<API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-2-0.dll"/>
<API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-2-1.dll"/>
<API Name="FindFirstFileExA" ModuleName="api-ms-win-core-file-l1-2-2.dll"/>
<API Name="FindFirstFileExA" ModuleName="api-ms-win-downlevel-kernel32-l1-1-0.dll"/>
<API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-1-0.dll"/>
<API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-2-0.dll"/>
<API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-2-1.dll"/>
<API Name="FindFirstFileExW" ModuleName="api-ms-win-core-file-l1-2-2.dll"/>
<API Name="FindFirstFileExW" ModuleName="api-ms-win-downlevel-kernel32-l1-1-0.dll"/>
<API Name="FindFirstFileExA" ModuleName="kernel32.dll"/>
<API Name="FindFirstFileExW" ModuleName="kernel32.dll"/>
请注意,有一堆
FindFirstFileExA
和FindFirstFileExW
条目,它们是实际存在的API。每当您的应用尝试调用FindFirstFileEx
时,它实际上是在调用其中之一。对于C/C++开发人员,预处理器实际上将
FindFirstFileEx
替换为A
或W
版本based on the existence of the UNICODE
macro。对于.NET开发人员,JIT运行时(或在.NET Native情况下为编译器)会根据
A
attribute的详细信息(例如W
和DllImport
属性的值)确定是调用CharSet
还是ExactSpelling
版本。问题就在这里-目前,商店中的WACK正在.NET程序集上运行,而之前,编译器已用正确的后缀版本替换了未后缀的版本。在开发计算机上运行WACK时,它会在之后正确地检查汇编程序,编译器已进行替换,因此您不会看到任何错误。
修复程序的第一部分(正在进行中)是将非后缀版本添加到允许列表中。修复程序的第二部分是确保WACK在后编译位上运行。
关于xamarin - 由于不支持的API FindFirstFileEx,UWP应用提交失败(WACK在本地传递),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45288395/