gpt4 book ai didi

xamarin - 由于不支持的 API FindFirstFileEx(WACK 在本地传递)导致 UWP 应用提交失败

转载 作者:行者123 更新时间:2023-12-04 03:48:47 37 4
gpt4 key购买 nike

我有一个 UWP 项目作为我的 Xamarin.Forms 解决方案的一部分。在本地运行 Windows 应用程序证书工具包时,它可以通过,没有任何问题。

将我的应用程序提交到商店时,认证过程失败并出现以下错误:

Error Found:

The supported APIs test detected the following errors:

API FindFirstFileEx in api-ms-win-core-file-l1-2-0.dll is not supported for this application type. PInvoke.Kernel32.dll calls this API.

Impact if not fixed:

Using an API that is not part of the Windows SDK for Windows Store apps violates the Windows Store certification requirements.

How to fix:

Review the error messages to identify the API that is not part of the Windows SDK for Windows Store apps. Please note, apps that are built in a debug configuration or without .NET Native enabled (where applicable) can fail this test as these environments may pull in unsupported APIs. Retest your app in a release configuration, and with .NET Native enabled if applicable.



我已验证我的应用程序在 Release模式下运行,并已验证我的 UWP build设置:

uwp

我尝试联系 Microsoft 的聊天支持,但被重定向到输入事件报告,然后我被重定向到仅在论坛上寻求帮助或支付高级技术支持,因此我无法获得有关是否这是否是有效的失败。

根据 FindFirstFileEx ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa364419(v=vs.85).aspx) 上的文档,Windows 桌面、应用商店应用程序和 Windows Phone 似乎都支持它。我的 UWP 应用提交支持桌面和移动家庭,似乎包含在此功能支持的客户端中,因此不清楚是什么导致失败。

关于从这里去哪里的任何想法?

最佳答案

2017 年 8 月 14 日更新 : 这个问题现在应该在商店中解决了。如果您遇到此问题,请尝试重新提交您的应用程序。

这是 WACK 扫描在 Store 中运行的方式以及它如何与 .NET Native 集成的问题。

在某些背景下,Windows 实际上没有名为 FindFirstFileEx 的 API。 - 它不存在。 WACK 支持的 API 扫描的工作方式是查看您调用的所有 API 并验证以下其中一项是否为真:

  • 它是由您的包中的另一个 DLL 导出的 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++ 开发人员来说,预处理器实际上取代了 FindFirstFileExAW版本 based on the existence of the UNICODE macro .

    对于 .NET 开发人员,JIT 运行时(或者,在 .NET Native 的情况下,编译器)决定是否调用 AW基于 DllImport attribute 的细节的版本,例如 CharSet 的值和 ExactSpelling特性。

    这就是问题所在 - 目前,商店中的 WACK 正在.NET 程序集上运行 之前 编译器已用正确的后缀版本替换了非后缀版本。当您在开发机器上运行 WACK 时,它会正确检查程序集 之后 编译器已经进行了替换,因此您看不到任何错误。

    修复的第一部分(正在进行中)是将非后缀版本添加到允许列表中。修复的第二部分是确保 WACK 在后编译位上运行。

    关于xamarin - 由于不支持的 API FindFirstFileEx(WACK 在本地传递)导致 UWP 应用提交失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288395/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com