跳到主要内容

代码编辑、补全与错误定位

脚本和自定义节点编辑器提供 C# 成员补全、方法参数提示、悬停说明和代码诊断。语言服务帮助编写代码;代码能否在当前网关使用,仍以网关的“编译并保存”和实际业务验证为准。

打开编辑器​

登录 TGateway Web,进入“开发配置 → 脚本管理”或“开发配置 → 自定义节点”,点击对应记录的“编辑”。

顶部一行集中放置 Roslyn 服务、撤销、重做和编译等操作。服务连接配置默认收起,底部页签用于查看编译日志、基础信息和参数。

自定义节点编辑器的顶部工具栏、代码区和底部面板

操作使用方法
撤销、重做点击顶部按钮,或使用 Ctrl+Z、Ctrl+Y。
成员补全输入对象名和 .;也可在光标位置按 Ctrl+Space。
接受候选用方向键选择候选,按 Enter 或 Tab 插入,再补齐调用参数和语句。
候选说明选中候选后查看说明区;可再次按 Ctrl+Space 展开或收起详情。
方法参数在调用的括号内输入参数;按 Ctrl+Shift+Space 重新打开参数提示。
悬停说明将鼠标停在类型、方法、字段或属性上,查看签名与注释。
编译并保存提交当前代码及参数,按所在编辑器的编译日志确认结果。

连接语言服务​

首次打开编辑器时自动连接 https://roslyn.thingsgateway.cn。需要使用自建 Studio 或排查连接时,再展开顶部“Roslyn 服务”。

  1. 点击“Roslyn 服务”,显示连接配置行。
  2. 填写服务根地址,例如自建 Studio 的 http://192.168.10.20:5100,不要追加 /api/completion。
  3. 点击“连接”,等待状态变为“可用”。仅修改输入框还没有应用新地址。
  4. 点击“恢复默认”可重新使用官方地址;再次点击顶部按钮可收起整行配置。

展开连接栏并连接到本机 Studio 语言服务

配置或状态说明
服务地址支持 HTTP、HTTPS 及反向代理的路径前缀;不填写账号、密码、查询参数或片段。
可用当前地址已返回有效的语言服务检测结果,可以继续验证补全和分析。
不可用按显示的超时、网络或 HTTP 原因检查地址及代理。活动编辑器会自动重试,也可手动连接。
保存范围自定义地址保存在当前浏览器的网站存储中;更换浏览器、域名或端口后需重新确认。

浏览器直接访问所填地址。localhost、127.0.0.1 指打开网页的电脑;远程用户应填写其电脑能够访问的服务器地址。HTTPS 网页应连接 HTTPS 语言服务,避免浏览器阻止混合内容。

连接语言服务会将当前编辑的源码和必要的参数定义发送到该服务进行分析。需要在内网处理源码时,可从下载中心获取 Studio 镜像及启动命令,自建服务后将编辑器指向该地址。

服务不可用时仍可编辑代码,并向当前网关提交正式编译。语言服务地址不改变网关管理地址,也不改变脚本或节点的运行位置。

使用网关成员补全​

以“数据转换”脚本为例,在代码区输入:

return GlobalData.

等待候选出现,选择 GetEnableVariables,按 Enter 接受,再补齐 ();。

GlobalData 成员候选及 GetEnableVariables 的中文摘要

完成后的代码为:

return GlobalData.GetEnableVariables();

该方法枚举当前启用的变量,返回变量 ID 与变量运行态的键值对;它不是单个数值。此处用于练习补全,绑定到消费者前仍需按消费者要求选择返回类型或继续计算。

将鼠标停在方法名上,可查看摘要、备注和返回值说明。

GetEnableVariables 的方法签名、摘要、备注及返回值说明

查看用户代码和 XML 注释​

补全也会分析当前源码中声明的类型、方法、字段和属性。为声明添加 /// XML 注释后,候选说明、悬停和参数提示可显示这些内容;不需要先把用户方法编译成网关内置 API。

例如在自定义节点编辑器中添加下面的类成员。不要把方法声明直接粘贴到只接收计算语句的“数据转换”脚本中。

/// <summary>将采集值换算为工程值。</summary>
/// <param name="rawValue">设备采集的原始读数。</param>
/// <param name="factor">当前量程的换算倍率。</param>
/// <returns>换算后的工程读数。</returns>
public double ApplyScale(double rawValue, double factor)
=> rawValue * factor;
  1. 在同一节点的另一个方法中输入 Apply,打开补全并选择 ApplyScale。
  2. 查看候选中的中文方法说明,接受候选后继续填写调用。
  3. 输入 ApplyScale(12, 时,核对当前参数已切换为 factor,并显示该参数的说明。

用户自定义 ApplyScale 方法的签名与中文 XML 说明

第二个参数 factor 的签名提示和中文说明

XML 标签建议填写内容
summary成员用途,优先写清输入输出和业务含义。
param参数含义、单位或范围,name 必须与实际参数名一致。
returns返回值的含义。
remarks适用条件、调用时机或其他必要补充。
value属性值的含义。

外部程序集的说明还依赖服务端同名 XML 文档与 DLL 一同部署。只有类型签名而没有注释时,先确认该成员存在注释及其 XML 文件;切换到引用版本一致的服务后再检查。工程专有引用需要由管理该工程的 Studio 提供,不能认为任意远程服务都已加载现场的私有程序集。

从错误定位到修复​

代码分析会标记当前编辑内容中的语法和类型问题。在底部“编译日志”查看错误,点击具体错误项可定位到对应代码行列。

点击诊断项定位到节点中未定义的成员

  1. 先处理第一条错误,核对错误所指的名称、参数类型或缺失符号。
  2. 修正代码,等待当前诊断更新;未完成的语句可能暂时显示错误。
  3. 点击“编译并保存”,确认没有编译、加载或保存失败。
  4. 返回业务配置,用真实输入验证输出;分析无错误不代表业务逻辑已经正确。

脚本与节点的保存顺序不同:脚本正式编译和加载成功后才保存本次源码;节点先保存当前草稿,再编译保存的版本。节点显示“保存成功”但“编译失败”时,不能视为新节点已生效。具体维护方法分别见脚本管理和自定义节点类型。

常见问题​

现象处理方法
输入 GlobalData. 没有候选展开服务栏确认连接可用,在点号后按 Ctrl+Space;仍失败时检查浏览器到语言服务的网络和跨域响应。
用户方法找不到检查声明是否在当前源码及合法作用域中,代码形态是否匹配脚本类型,前面的语法错误是否影响解析。
说明只有签名确认源码有有效 XML 注释;外部程序集需同时部署对应 XML,且服务引用与网关版本一致。
参数说明不对应核对当前重载、光标所在参数以及 param name,必要时重新打开参数提示。
服务返回 200,浏览器仍报跨域错误检查允许来源响应头及 OPTIONS 预检;代理返回的 HTML 页面也不是有效语言服务响应。见浏览器跨域调用。
自动分析通过,正式编译仍失败以当前网关的编译日志为准,核对脚本类型、参数和程序集版本。
找不到自动添加 using 的修复方法体和节点成员片段不提供文件级 using 修复;按脚本支持的写法手动补充命名空间,再重新编译。

相关说明​