English | 简体中文
A browser-only CAN database (DBC) editor built with Blazor WebAssembly. · 在浏览器里打开、编辑、评审 CAN 数据库(DBC)文件的独立 Web 应用。
定位:汽车电子与工具链开发者需要在不安装桌面软件、不把整车 CAN 数据交给第三方服务的前提下查看和校对 DBC 文件时使用。文件在浏览器本地解析,会话持久化默认关闭。
状态:主分支活跃开发中,尚未发布版本化 Release(依据:仓库无 tag、Releases 列表为空;.github/workflows/deploy.yml 在每次 push main 时构建并部署到 GitHub Pages)。
在线 Demo · 快速开始 · 贡献指南 · 功能设计文档
DbcView 把 DBC 文件的浏览、编辑与评审收进一个浏览器标签页:文件树管理多个同名文档,表格与原始文本双视图互跳,属性面板支持注释、属性和信号值表的表单编辑并预览单条语句差异。
导出固定写入新的 <原名>.reviewed.dbc(UTF-8 无 BOM),不会覆盖上传的源文件。
界面跟随操作系统的浅色/深色配色,文件树、表格与上传控件均可仅用键盘操作。
| 能力 | 说明 |
|---|---|
| DBC 文件浏览器 | 可折叠的文件夹/文件树,支持本地 .dbc 上传、WAI-ARIA 键盘导航与主题适配 |
| 消息与信号编辑器 | 可折叠、虚拟化的表格,支持键盘导航;可切换原始文本视图 |
| 搜索 | 命令面板支持消息/信号名、十进制/0x ID、发送者、Receiver 与注释;/ 或顶栏搜索按钮打开 |
| 属性面板 | 只读的 General、Comments、Attributes、Value table、Multiplexing、Not displayed、Not interpreted 分区,并支持源行定位 |
| 编码 | BOM/UTF-8 检测与 Windows-1252 回退;未定义字节计数并展示 |
| 结构化编辑 | 通过表单编辑注释、消息/信号属性与信号值表;单语句差异预览、Revert all、UTF-8 .reviewed.dbc 下载 |
| 会话持久化 | 可选启用本地 IndexedDB 恢复文件夹、文件、当前文本、打开标签、活动标签与 Table/Text 模式;Forget 清除 |
flowchart LR
subgraph WS["DbcView 工作区"]
direction LR
EXP["文件浏览器<br/>工具面板"] --- EDT["编辑器<br/>文档标签"]
EDT --- PRP["属性面板<br/>工具面板"]
end
https://HestiaLab.github.io/DbcView/ — 无需安装,直接访问即可使用。
需要 .NET 10 SDK(仓库通过 global.json 固定版本)。
dotnet restore DbcView.sln --configfile NuGet.Config
dotnet build DbcView.sln --no-restore
dotnet test DbcView.sln --no-build --no-restore
dotnet run --project src/DbcView.Web/DbcView.Web.csproj --no-restore打开 dotnet run 输出的 URL。若默认端口已被占用,追加 --urls http://127.0.0.1:<端口> 指定端口。
上传 samples/ 下的任一文件即可看到完整效果:bmw_e9x_e8x.dbc(325 条消息、130 个信号)、semantics-full.dbc(属性与值表语义)、legacy-windows1252.dbc(Windows-1252 编码回退)。
Chromium 冒烟测试会在 http://127.0.0.1:5210 启动 Release 应用:
dotnet build src/DbcView.Web -c Release
dotnet build tests/DbcView.BrowserTests -c Release
pwsh tests/DbcView.BrowserTests/bin/Release/net10.0/playwright.ps1 install chromium
dotnet test tests/DbcView.BrowserTests -c Release --no-buildCI 使用 AOT 发布(-p:RunAOTCompilation=true),通过 DBCVIEW_BASE_URL 对发布产物运行同一套测试。
4 MB 性能包络依赖 AOT;仅开发使用的性能探针位于 /perf。
工作区停靠布局、文档标签与撤销历史来自
Atlas.Blazor。Explorer 文件树使用
Astrea.Components 的 Tree 0.8.0:
稳定的文件夹/文件 id、受控选中与展开、WAI-ARIA tree/treeitem 键盘导航。
树样式表由包提供,并通过应用的 CSS 令牌适配明暗主题。两者均以已发布
NuGet 包形式消费,不引入组件源码。
flowchart TD
UP[选择上传目标文件夹] --> SEL[上传 .dbc 文件]
SEL --> OPEN[在文件树中打开]
OPEN --> EDT[表格 / 文本编辑]
EDT --> SAV[保存]
OPEN --> PRP[在属性面板中查看]
- 上传上限为 4 MB,文件会进入界面上显示的 Upload target 文件夹。
- 文件树中的文件夹可用箭头折叠/展开;上传目标文件夹与活动文件会同时高亮。 树是单一 Tab 停靠点,支持方向键导航。
- 文档标识由目录与文件名共同组成,因此
A/x.dbc与B/x.dbc会作为 两个独立标签打开并分别保存。 - 非法 DBC 文本会保留为未验证草稿:保存始终保留原始文本,并显示带行号 和稳定错误码的诊断信息。合法空文件仍显示 “No messages in this DBC file”。
- 消息默认折叠;使用行内箭头或
←/→折叠/展开。↑/↓、Home/End与PageUp/PageDown在行间移动;表格工具栏提供 Expand all / Collapse all。 - 焦点不在可编辑控件时按
/,或点击顶栏搜索按钮,可打开命令面板。它只搜索 当前文档,按精确 > 前缀 > 子串排序,并精确跳转到消息或信号行;Esc关闭并把焦点归还。消息/信号注释也可搜索,并在 Properties 中高亮。 - Properties 展示 General、Comments、Attributes、Value table、Multiplexing、 Not displayed、Not interpreted 分区。源行按钮会切到 Text、选中整条语句并聚焦; 存在未保存文本时先提示保存。
- 可在 Properties 中编辑文件/消息/信号注释、消息/信号显式属性与信号值表。表单会
预览唯一被修改的语句;Apply 更新内存文档与 Text 缓冲区,不写原文件。
Revert all edits 恢复到标签打开时的内容。编辑
VAL_TABLE_引用会创建内联副本。 - Download 会先重新解析当前文本,存在 error 时阻止下载。输出为新的
<原名>.reviewed.dbc,固定 UTF-8 无 BOM;非 UTF-8 源文件会提示编码转换。 上传的源文件不会被覆盖。 - Text 视图存在未保存修改时,语义编辑按钮禁用。
- 会话持久化默认关闭。点击顶栏数据库按钮,阅读仅本地存储的说明后启用。 它会在当前浏览器的 IndexedDB 中保存文件夹、文件名、当前文档文本、打开标签、 活动标签与 Table/Text 模式;Text 未保存草稿不会存入。修改经过短暂防抖后写入, 状态栏显示最后保存时间。Forget saved session 会清除数据并关闭恢复。
- 数据损坏或 schema 不兼容时整体丢弃并显示提示;本地存储失败会明确显示, 不静默丢数据。
- 上传按 BOM 标记的 UTF-8/UTF-16、严格 UTF-8、Windows-1252 顺序解码。状态栏与 File Properties 显示检测到的编码;Windows-1252 未定义字节会计数并保留为 U+FFFD。
- 文件、文件夹和上传选择器均可仅用键盘操作;宽度低于 700 px 时,通过 Explorer / Editor / Properties 切换器保证所有面板可达。
- 中性的工具型界面会跟随操作系统的浅色或深色配色。
DbcView/
├── src/DbcView.Domain/ 文档模型、标识与诊断
├── src/DbcView.Application/ 用例、仓储与编解码端口
├── src/DbcView.Infrastructure/ DBC 解析/序列化、内存仓储
├── src/DbcView.Web/ Blazor WASM 表现层与组合根
│ ├── Components/ 工作区宿主与面板(Atlas、Astrea 树)
│ ├── Services/ 浏览器上传读取
│ ├── ViewModels/ 文件树/编辑器/属性视图模型
│ └── Pages/ Index (/)、Verification (/verification)、Perf (/perf)
├── tests/DbcView.Tests/ xUnit + bUnit 测试
├── tests/DbcView.BrowserTests/ Playwright Chromium 冒烟测试
├── samples/ 样例 CAN 数据库文件
└── assets/ README 截图
samples/bmw_e9x_e8x.dbc 是社区维护的 BMW E9x/E8x 车型 CAN 数据库文件,来源为
https://github.com/dzid26/opendbc-BMW-E8x-E9x(MIT 许可;见文件头
CM_ "License MIT" 注释)。
样例文件仅用于演示和测试。与 BMW 无任何关联或认可关系;"BMW" 及车辆名称均为 各自所有者的商标。数据可能不准确或已过时,请勿用于生产车辆。
本项目采用 Apache License 2.0 许可。
Copyright 2026 HestiaLab.
第三方样例数据保留原始许可:samples/bmw_e9x_e8x.dbc 为 MIT 许可,详见文件头。