# cstools **Repository Path**: graviton/cstools ## Basic Information - **Project Name**: cstools - **Description**: C# tools collection - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-20 - **Last Updated**: 2026-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CsTools 一个 Windows 桌面端的小工具集合,使用 Avalonia 12 + .NET 10 + C# 构建, 灵感来自 Microsoft PowerToys:一个主窗口列出所有工具,点击工具瓷砖会**在独立窗口中打开**对应的子工具,因此可以同时运行多个工具. ## 已有工具 ### 字符串工具 - 输入框(自由编辑) + 输出框(只读,可选取) + 复制按钮 - 选项(实时生效): - 删除空格(包含 Tab 与全角空格 ` `) - 删除换行(`\n` / `\r`) - 中文标点 → 英文标点:`, . ; : ? ! " " ' ' ( ) [ ] 「 」 < > , -- ...` ### SSH / SCP 工具 - 从 exe 同目录 `settings.toml` 读取服务器,默认路径,密码和命令列表. - 支持密码登录,使用 `SSH.NET` 执行 SSH/SCP,不依赖外部 `ssh/scp` 命令. - 支持: - SCP 远程 -> 本地 - SCP 本地 -> 远程 - SCP 压缩传输(`-C`),默认开启 - SSH 执行远程命令 - dry run 预览 - 保存当前 GUI 设置到 `settings.toml` - SSH 命令列表记忆和去重 SCP 工具的目录源路径语义和 `scp src/ dest/` 一致:如果 `src/` 是目录,不会复制 `src` 这个顶层目录本身,而是直接复制 `src/` 中的文件到目标目录. `docs/settings.toml` 是源码模板;build/publish 时会复制为输出目录根部的 `settings.toml`.运行时只读取 exe 同目录的 `settings.toml`. ## 运行 ```bash dotnet build dotnet run ``` 需要 .NET 10 SDK. 在 windows 上, 如果程序正在运行,普通 `dotnet build` 可能因为输出 exe/dll 被锁定而失败.仅验证编译时可以使用: ```bash dotnet build -o .out/verify-build ``` 发布 publish ```pwsh dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true ``` ## 项目结构 ``` CsTools.csproj App.axaml(.cs) Avalonia 应用入口 ViewLocator.cs VM → View 的命名约定解析器 Views/ MainWindow.axaml 主窗口:工具瓷砖入口 EntrancePanelView.axaml 工具瓷砖面板 (点击瓷砖会弹出独立 ToolWindow) ToolWindow.axaml 通用子工具窗口外壳 (标题绑定 VM.Title,内容由 ViewLocator 渲染) StringToolView.axaml 字符串工具 SshToolView.axaml SSH / SCP 工具 ViewModels/ MainWindowViewModel.cs 持有 Entrance EntrancePanelViewModel.cs 工具列表 ToolViewModel.cs 子工具基类 (Title 用作窗口标题) StringToolViewModel.cs 字符串工具实现 SshToolViewModel.cs SSH / SCP 工具实现 Models/ ToolDescriptor.cs Name / Description / Icon / Factory docs/ settings.toml 运行时 settings.toml 的源码模板 ``` ## 添加新工具 1. 在 `ViewModels/` 新建 `XxxViewModel.cs`,继承 `ToolViewModel`,实现 `Title`(也会显示为窗口标题). 2. 在 `Views/` 新建 `XxxView.axaml` + `XxxView.axaml.cs`(`UserControl`),`x:DataType` 指向新 VM.`ViewLocator` 会按名称(`ViewModel` ↔ `View`)自动匹配. 3. 在 `EntrancePanelViewModel.Tools` 列表中追加一个 `ToolDescriptor`,`Factory = () => new XxxViewModel()`. 无需改动 `MainWindow`,`ToolWindow` 或任何窗口管理代码.