本文涵盖以下主题:
App验证规则介绍
在验证App之前,它必须通过各种测试。这些测试确保了 ETS 的质量、性能和稳定性。上传 App 版本进行验证时,测试结果会报告给开发人员。(请参阅App验证)
检查分为 2 个不同的严重情况:
错误:这些测试是明确的。任何失败的测试都会自动阻止App的验证。
警告:这些测试表明可能存在违反规则的情况。该App必须手动检查。如果这样的手动检查显示没有违反规则,则App验证通过。否则,如果违反了规则,则验证失败。
由于App可能包含其它程序集,例如日志记录组件或 zip 程序集,因此检查必须据此做相应调整。有些规则App本身必须严格遵守,但对其它程序集来说可能只是警告。例如,App 本身必须针对 .NET Framework 4.0 编译,但第三方组件可以针对不同的 .NET Framework 编译。否则,像 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的检查,不适用于所有程序集 |
至少必须提供一份英文帮助文件。 |
向 etsapp 中添加一份英文帮助文件。允许的格式有:
|
11 |
.NET 运行时版本太旧 |
错误 |
警告 |
Etsapp容器中的所有程序集都必须使用.NET runtime 4.0构建。不支持旧版本。 |
使用目标框架 .NET Framework 4 重新构建应用程序。 |
12 |
App没有版本 |
错误 |
n.a. - 此规则用于App检查,不适用于每一个程序集 |
App必须有一个版本号。此版本将用于识别可用的更新和/或最大限度的帮助减少支持事务的工作量。 |
使用指定的文件版本重新构建App。 |
13 |
应用程序属性的版本与装配产品版本中指定的版本不同。 |
错误 |
n.a. 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 使用了 ETS 在不同版本中使用的组件 |
警告 |
n.a. - 该规则用于App的检查,不适用于所有程序集。 |
ETS 使用的组件也被App使用,但版本不同 |
为了避免任何可能的不兼容问题,使用与ETS相同的组件版本 |
25 |
找不到清单文件中 AddInAssembly 属性中指定的应用程序集 |
错误 |
n.a. - 该规则用于App的检查,不适用于所有程序集 |
找不到App程序集 |
确保App程序集(指示在清单文件中)存在 |
必须正式确认的规则
这些规则必须由开发人员手动确认,因为无法进行自动验证。
如果开发人员违反任何规则(自动验证或正式确认),验证将失败。如果在验证后发现有违反规则,则可以撤销验证。
| 按名称 | 说明 | 解决方案 |
只能通过 MyKNX 更新 |
App可能没有自己的更新机制。 App 的更新仅可通过 MyKNX 获取。这就阻止了未经验证的App的发布。 |
删除任何用于绕过 MyKNX 更新 App 的机制。 |
没有连接到ETS4数据库的SQL连接 |
不允许任何 App 直接访问数据库。 |
删除任何直接访问 ETS4 数据库的机制。 |
App 不能把数据持久保存在文件系统里 |
|
删除所有直接在文件系统中存储数据的机制,并使用项目的 AppData 替换它们。 |
App 不得在全屏模式运行 |
App不得隐藏ETS窗口并充当主要应用程序。 ETS必须一直能识别为主应用程序。 |
删除使App充当主应用程序的任何代码。 |
App必须响应或指示忙状态 |
如果App执行耗时操作,导致ETS无响应,则App必须显示进度或繁忙指示 |
为耗时操作使用进度指示器。 |
App不能意外关闭。 |
App必须通过提供用户友好的错误消息来对异常做出反应。显示消息后,App必须继续运行。不接受一般或不充分的错误消息,以及未处理异常后应用程序意外关闭。 |
实施正确的错误处理,在每种情况下都显示用户友好的消息。确保未处理的异常不会导致App崩溃。 |