本文涵盖以下主题:
App验证规则介绍
在验证App之前,它必须通过各种测试。 这些测试确保了 ETS 的质量、性能和稳定性。 上传 App 版本进行验证时,测试结果会报告给开发人员。 (请参阅App验证)
检查分为 2 个不同的严重情况:
错误:这些测试是明确的。 任何失败的测试都会自动阻止App的验证。
警告:这些测试表明可能存在违反规则的情况。 该App必须手动检查。 如果这样的手动检查显示没有违反规则,则App验证通过。 否则,如果违反了规则,则验证失败。
由于App可能包含其他程序集,例如日志记录组件或 zip 程序集,因此检查必须适应这一点。 App本身必须严格遵守的一些规则可能是对某些其他程序集的警告。 例如,虽然App必须针对 .NET 框架 4.0 进行编译,但第三方组件可能针对不同的 .NET 框架进行编译。 否则,根本无法使用,例如log4net。 另一方面,对附加程序集的过度放松规则的严格性不是一种选择,因为它可能会邀请开发人员将有问题的代码外包到这些附加程序集。
此问题的解决方案是将程序集检查拆分为 2 次运行:
来自 App 开发者本身的所有程序集都必须遵守规则的严格解释。 这确保了App本身按照严格的规则实现,以及来自相同开发人员的任何组件。
在第二次运行中,将检查来自第三方开发人员的所有程序集。 对于这些程序集,一些规则的检查不那么严格,因为App开发人员几乎没有机会影响这些程序集的实现。 那些处理不那么严格的规则被报告为警告,并且必须在允许验证通过之前进行手动审查。 尽管如此,一些规则仍然很严格,例如,禁止以任何方式对总线进行直接访问。
每个App必须遵循的规则列表如下所述。 此外,还提供了开发人员如何避免或解决问题的简短描述。 两种情况都提供了严重性:严格版本(App开发人员程序集)和较弱版本(第三方开发人员程序集)
App验证规则
自动检查规则
- 缺少强名称
- 发现多个ETS加载项
- 启动外部进程
- 非托管代码的使用
- 使用禁止的 KNX 组件
- 无法创建App实例
- App实例创建速度太慢
- 直接连接 KNX 总线。
- App文件过大
- 缺少英文帮助文件
- .Net 运行时间太旧
- App没有版本
- App 属性具有与程序集版本中指定版本不同的版本
- 容器必须包含有效的清单文件
- 容器不能包含 SDK 程序集
- 使用非官方SDK版本
- 检测到 SQL 连接
- 检测到可疑命名空间的使用
- 缺少英语支持
- 意外的APP-ID
- 无效的DCA制造商ID
- DCAs 不应使用 UI App功能
- DCA 必须支持 x64
- App使用ETS5在不同版本中使用的组件
- 找不到清单文件中 AddInAssembly 属性中指定的应用程序集
ID |
名称 |
开发人员严重度 |
第三方开发人员严重度 |
描述 |
解决方案 |
1 |
缺少强名称 |
错误 |
错误 |
Etsapp 容器中的每个 .Net 程序集都必须使用强名称进行签名,以防止歧义。 |
向解决方案中添加强名称密钥(snk文件)。 |
2 |
发现多个ETS加载项 |
错误 |
错误 |
每个etsapp容器只能包含一个从IEts4Addin继承的类,并具有System.AddIn.AddInAttribute,或者换句话说:在每个etsapp容器中,只能有一个ETS App。 |
从 etsapp 中删除从 IEts4App 继承的所有其他类。 |
3 |
启动外部进程 |
错误 |
错误 |
App可能不会启动外部进程。 |
删除启动外部进程的代码。 |
4 |
非托管代码的使用。 |
警告 |
警告 |
该App使用对本地组件 (DLLImport) 的调用。 这将导致手动检查。 |
如果手动检查发现非法使用非托管代码,请删除这些用法。 |
5 |
使用禁止的 KNX 组件 |
错误 |
错误 |
仅当它们属于 SDK 时才允许引用 KNX 组件,即 允许使用 Knx.Ets.SDK.*、Knx.Ets.CommonTypes、Knx.Ets.CommonResources。 禁止任何其他 KNX 引用。 允许引用 .Net 框架或自己的程序集。 |
删除禁止的命名空间的所有用法。 |
6 |
无法创建App实例 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
创建 App 的实例时,不会抛出任何异常。 |
解决引发异常的问题。 |
7 |
App实例创建速度太慢 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
App实例的创建时间可能不超过 5 秒。 这将限制App对 ETS5 整体性能的负面影响。 |
找出性能问题的原因,更改实现,以便在 5 秒内创建实例。 |
8 |
直接连接到 KNX 总线。 |
错误 |
错误 |
不允许Falcon连接。 不允许任何App提供直接连接到 KNX 总线的连接。 |
删除直接访问 KNX 总线的所有用法。 |
9 |
App文件过大 |
错误 |
n.a. - 该规则用于etsapp的检查,不适用于所有程序集。 |
etsapp 容器的最大大小为 100 MB。 |
解决方案:减小文件大小,例如,删除额外文件,像 pdf 文档、视频或图片,或减小它们的大小。 |
10 |
缺少英文帮助文件 |
错误 |
n.a. - 该规则用于etsapp的检查,不适用于所有程序集。 |
必须提供至少一个英文编译的 HTML 帮助文件 (*.chm)。 |
将一个英文编译的 HTML 帮助文件添加到 etsapp。 |
11 |
.NET 运行时间太旧 |
错误 |
警告 |
Etsapp容器中的所有程序集都必须使用.NET runtime 4.0构建。 不支持旧版本。 |
使用目标框架 .NET Framework 4 重新构建应用程序。 |
12 |
App没有版本 |
错误 |
n.a. - 此规则用于App检查,不适用于每一个程序集 |
App必须有一个版本号。 此版本将用于识别可用的更新和/或最大限度的帮助减少支持事务的工作量。 |
使用指定的文件版本重新构建App。 |
13 |
应用程序属性的版本与装配产品版本中指定的版本不同。 |
错误 |
n.a. - 此规则用于App检查,不适用于每一个程序集 |
应用程序版本和程序集产品版本(应用程序 DLL)必须相同。 此版本将用于识别可用的更新和/或最大限度的帮助减少支持事务的工作量。 |
使用指定的产品版本重建应用程序。 |
14 |
容器必须包含有效的清单文件 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
每个 ETS-App 容器必须包含一个有效的清单文件。 |
将有效的清单文件添加到容器中。 |
15 |
容器不能包含 SDK 程序集 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
ETS-App 容器不能包含来自 ETS-SDK 的任何程序集。 |
从容器中删除任何 SDK 程序集。 |
16 |
使用非官方SDK版本 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
不允许发布使用ETS-SDK的未发布版本构建的 ETS-App 容器。 |
通过仅引用已发布 SDK 版本中的文件来重新构建App。 |
17 |
检测到 SQL 连接 |
警告 |
警告 |
如果程序集使用 SQL 命名空间 (System.Data.SqlClient),则会报告一条消息。 这将导致手动检查。 例如,如果 SQL 命名空间用于从访问数据库导入数据,那么这是允许的。 没有 SDK ObjectModel 的情况下访问 ETS4 数据库的任何尝试都会被禁止,无论是读取还是写入。 |
如果手动检查发现非法使用 SQL 命名空间,需删除这些用法。 |
18 |
检测到可疑命名空间的使用 |
警告 |
警告 |
命名空间 System.Net.*、System.Data.Sql 和 System.Web 的使用会导致通知。 必须手动检查这些命名空间是否以符合 etsapp 规则的方式使用。 如果没有,验证将被拒绝。 |
如果手动检查发现非法使用这些可疑名称空间,需删除这些用法。 |
19 |
缺少英语支持 |
警告 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
如果App支持多种语言,那么英语必须在这些支持的语言之中。 该检查会搜索App的英语本地化。 如果没有发现,则必须手动检查中性文本是否已为英语。 |
添加对英语的支持。 |
20 |
意外的APP-ID |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
AddIn 实例返回的App-ID必须与 AddIn 清单文件中的相同。 |
在 AddIn 类和清单文件中使用相同的 App-ID。
|
21 |
无效的 DCA 制造商ID | 错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
DeviceConfiguration 中的制造商 ID 与 AddIn 的制造商 ID 不匹配。 | 对 App-ID 和应用程序 ID 使用相同的制造商 ID。 |
22 |
DCA 不应使用 UI App功能 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
DCA 不应使用以下功能:
|
不要在 DCA 中使用 AddIn 功能 |
23 |
DCA 必须支持 x64 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
任何DCA都必须支持x64,这样ETS就无需运行于兼容模式。
|
构建您的支持 x64的App,并将清单中的 Is64BitCompatible 设置为 true。
|
24 |
App使用ETS5在不同版本中使用的组件 |
警告 |
n.a. -此规则的检查适用于App,非用于每个程序集。 |
ETS 使用的组件也被App使用,但版本不同 |
为了避免任何可能的不兼容问题,使用与ETS相同的组件版本 |
25 |
找不到清单文件中 AddInAssembly 属性中指定的应用程序集 |
错误 |
n.a. -此规则的检查适用于App,非用于每个程序集。 |
找不到App程序集 |
确保App程序集(指示在清单文件中)存在 |
必须正式确认的规则
这些规则必须由开发人员手动确认,因为无法进行自动验证。
如果开发人员违反任何规则(自动验证或正式确认),验证将失败。 如果在验证后发现有违反规则,则可以撤销验证。
名称 | 描述 | 解决方案 |
只能通过 MyKNX 更新 |
App可能没有自己的更新机制。 App的更新只能通过 KNX OLT 进行。 这就阻止了未经验证的App的发布。 |
删除任何用于绕过 KNX OLT 来更新App的机制。 |
没有连接到ETS4数据库的SQL连接 |
不允许任何 App 直接访问数据库。 |
删除任何直接访问 ETS4 数据库的机制。 |
App可能不会在文件系统中保留数据 |
|
删除所有直接在文件系统中存储数据的机制,并使用项目的 AppData 替换它们。 |
App可能不能在全屏模式下运行 |
App不得隐藏ETS窗口并充当主要应用程序。 ETS必须始终可识别为主应用程序。 |
删除使App充当主应用程序的任何代码。 |
App必须响应或指示忙状态 |
如果App执行耗时操作,导致ETS无响应,则App必须显示进度或繁忙指示 |
为耗时操作使用进度指示器。 |
App不能意外关闭。 |
App必须通过提供用户友好的错误消息来对异常做出反应。 显示消息后,App必须继续运行。 不接受一般或不充分的错误消息,以及未处理异常后应用程序意外关闭。 |
实施正确的错误处理,在每种情况下都显示用户友好的消息。 确保未处理的异常不会导致App崩溃。 |