xiaokeer-cms
基于 .NET 8 的 Windows 桌面内容管理系统,实现文件托管、元数据索引与 MDX 转储功能。
.NETWPFC#SQLiteEntity Framework CoreASP.NET CoreMarkdown
项目简介
Xiaokeer CMS 是一个基于 .NET 8 的 Windows 桌面内容管理系统,面向个人用户,旨在解决本地电脑中文件分散、缺乏统一管理的问题。项目采用 WPF + ASP.NET Core 混合架构,实现文件托管、元数据索引、HTTP API 访问和 MDX 转储等核心功能,与 xiaokeer-discover 博客项目形成完整的工具链。
主要特性
- 📁 文件托管中心:将散落在各处的文件统一托管到集中存储目录
- 🏷️ 元数据索引:为每个文件生成 UUID,记录原始文件名、类型、大小、导入时间等
- 🌐 HTTP API 服务:内嵌 Kestrel 服务器提供 RESTful API,支持内容检索、下载和预览
- 📝 MDX 转储工具:支持将 Markdown 文件转储为 MDX 格式,与博客项目无缝对接
- 🖼️ 图片智能处理:自动提取 Markdown 中的图片,重命名并存储到专用目录
- 🔊 音效反馈系统:操作成功/失败时播放音效,提升用户体验
技术栈
| 类别 | 技术 |
|---|---|
| 编程语言 | C# (.NET 8) |
| GUI 框架 | WPF (MVVM) |
| MVVM 工具 | CommunityToolkit.Mvvm |
| 数据库 | SQLite + Entity Framework Core 8.0 |
| HTTP 服务 | ASP.NET Core Minimal APIs (Kestrel) |
| Markdown 解析 | Markdig |
| MDX 验证 | Node.js + @mdx-js/mdx |
| 依赖注入 | Microsoft.Extensions.Hosting |
技术亮点
亮点一:WPF + ASP.NET Core 混合架构
项目创新性地将桌面应用与 HTTP API 服务融合:
- 内嵌 Kestrel 服务器:在 WPF 应用中托管 ASP.NET Core,无需额外部署 Web 服务
- Minimal APIs 设计:轻量级 API 端点定义,代码简洁高效
- 统一生命周期管理:WPF 应用与 Kestrel 服务共享同一进程,统一启动和关闭
- 跨进程访问支持:其他应用可通过 HTTP API 访问托管内容
// 内嵌 Kestrel 服务配置
var builder = WebApplication.CreateBuilder();
builder.WebHost.ConfigureKestrel(options =>
{
options.Listen(IPAddress.Loopback, port);
});
亮点二:Markdown 图片智能处理
实现了完整的 Markdown 图片处理流程:
- 图片提取:使用正则表达式解析 Markdown 中的图片引用
- 智能重命名:将图片重命名为
{uuid}_{序号}.{ext}格式,避免命名冲突 - 路径更新:自动更新 Markdown 中的图片引用路径
- 批量处理:支持一次性处理文档中的所有图片
// 图片处理核心逻辑
var imageMatches = Regex.Matches(content, @"!\[.*?\]\((.*?)\)");
foreach (Match match in imageMatches)
{
var originalPath = match.Groups[1].Value;
var newFileName = $"{contentId}_{index}{extension}";
// 复制文件并更新引用
}
亮点三:跨语言 MDX 验证
实现了 C# 与 Node.js 的协作:
- 进程间通信:C# 启动 Node.js 进程执行 MDX 验证脚本
- 标准化输出:Node.js 脚本输出 JSON 格式的验证结果
- 错误捕获:完整捕获标准输出和错误输出,便于调试
- 与 Velite 兼容:使用 @mdx-js/mdx 作为验证引擎,与博客项目保持一致
// Node.js MDX 验证脚本
import { compile } from "@mdx-js/mdx";
const result = await compile(content);
console.log(JSON.stringify({ success: true }));
亮点四:批量操作设计模式
实现了健壮的批量操作机制:
- 失败即停策略:任一操作失败立即停止,防止数据不一致
- 进度实时反馈:通过事件机制实时更新操作进度
- 可取消操作:支持用户中途取消批量操作
- 详细日志记录:记录每个操作项的成功/失败状态
亮点五:音效反馈系统
提升了桌面应用的用户体验:
- 多场景音效:成功、错误、警告、提示、点击等不同音效
- 异步播放:不阻塞主线程,不影响操作流畅性
- 可配置开关:用户可自由开启/关闭音效
- 资源嵌入:音效文件嵌入程序资源,无需外部依赖
亮点六:MDX 同步状态判断
实现了 MD 文件与 MDX 文件的智能同步检测:
- SHA256 哈希比较:精确检测内容变化
- Frontmatter 处理:去除 Frontmatter 后比较 Markdown 内容
- 四种状态区分:不支持MDX、MDX不存在、MDX不同步、MDX同步
- 批量状态检验:支持一键检验所有文档的同步状态
项目截图

相关链接
- 代码仓库:GitHub