如果我的 Winforms 应用程序的平台设置为 x86,SQLite 会无法运行吗?

Posted

技术标签:

【中文标题】如果我的 Winforms 应用程序的平台设置为 x86,SQLite 会无法运行吗?【英文标题】:Will SQLite fail to run if the Platform of my Winforms app is set to x86? 【发布时间】:2021-06-22 13:56:03 【问题描述】:

在我准备将我的应用程序提交到 Microsoft Store 时获得的 ValidationResult(我的应用程序“通过警告”),我在报告的“包健全性测试”部分下得到了这个“失败”:

我觉得这很令人困惑,因为它说“e_sqlite3.dll 仅适用于 arm 处理器类型”和“e_sqlite3.dll 仅适用于 x64 处理器类型”

“仅”这个词不应该排除这种类型的多个陈述吗?说“我唯一的狗叫 Fido”和“我唯一的狗叫 Spot”对我来说有意义吗?

此外,在抱怨“e_sqlite3.dll 仅适用于 x64 处理器类型”之后,该消息“承认”在这种情况下,ProcessorArchitecture 确实被声明为 x86。那么有什么问题呢?

我觉得奇怪的是这被归类为测试的失败部分,但总体结果是我的应用通过了(尽管有警告)。

以下是此解决方案的配置管理器设置:

如果按原样部署应用程序会导致 SQLite 无法在某些用户的计算机上运行,​​我需要做什么?

更新

为了回答 Peter Torr 的问题,这里是项目中的 SQLite 参考:

我所有与 SQLite 相关的用法是:

using Microsoft.Data.Sqlite;

...关于项目架构,Configuration Manager 是这样说的,将解决方案显示为 x86,主项目显示为 AnyCPU,Package 项目显示为 x86:

这是我尝试在“MyMaps”项目上将“AnyCPU”更改为“x86”的地方,以便它全面采用 x86(屏幕截图显示选择了 x64,但我在捕获屏幕截图后选择了 x86) :

当我然后选择 x86 和“确定”按钮时,它告诉我:

所以它不会让我将“AnyCPU”更改为“x86”......?!?

【问题讨论】:

恭喜您的应用通过了Microsoft Store的验证! FAILED 消息似乎来自本地验证的测试结果(Windows App Certification Kit)。事实上,来自本地验证的消息并不完全准确。它们只是一个参考。更准确的验证结果仍取决于 Microsoft Store 的验证。现在您的应用已通过 Microsoft Store 的验证,您可以忽略这些 FAILED 消息。 就我个人而言,我避免使用 AnyCPU,因为它似乎会导致问题(我不记得究竟是什么......但是问题)。而且 UWP 应用程序永远不会作为 IL 执行; Store 将它们编译为本机代码。所以我只是将您的 MyMaps 项目更改为 x86。您的项目中是否有两个版本的 SQLite DLL(在不同的目录中)? @PeterTorr-MSFT:请查看我的更新,其中包含我正在使用的 SQL 引用和 ConfigMan 的屏幕截图 如果您的应用通过了 Microsoft Store 的验证,您可以忽略本地验证的结果(本地 WACK)。在线验证的结果比本地验证更准确(使用本地 Windows App Cert Kit 应用)。 赏金仅剩一天;如果你们中的一个微软人想发布一个答案,我会奖励它。 【参考方案1】:

事实上,来自本地验证(local WACK)的消息并不完全准确。它们只是一个参考。更准确的验证结果仍然取决于在线验证(online WACK)测试。现在您的应用已通过 Microsoft Store 的验证,您可以忽略来自本地 Windows 应用认证工具包的这些 FAILED 消息。

【讨论】:

以上是关于如果我的 Winforms 应用程序的平台设置为 x86,SQLite 会无法运行吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 WinForms 中修改停靠布局

WinForms TabControl - 添加新标签按钮(+)

根据表单大小设置 splitContainer 属性大小 C# WinForms

如何让 WinForms 应用程序全屏显示

如何将winforms datetimepicker设置为没有默认值?

Winforms:如何加速 Invalidate()?