feat: 增强便携版支持与配置管理
- 更新 .gitignore 文件,添加便携版分发目录和 Fody 生成的配置文件。 - 修改 README.md,详细说明便携版的构建与分发流程,强调单文件分发的优势。 - 在 Config.cs 中实现便携配置管理,优先使用 exe 同目录的 config.json,提升用户体验。 - 更新 ExcelService.cs,优化默认模板的导出逻辑,支持现场替换模板文件。 - 在 MainForm.cs 中加载应用图标,提升界面一致性。 - 调整 Program.cs,确保在单文件分发时正确加载 native DLL。
This commit is contained in:
@@ -33,9 +33,17 @@ TFSImport/
|
||||
├── data/
|
||||
│ └── work_items.example.csv # 列结构与示例行(UTF-8 BOM);真实台账不入库
|
||||
├── templates/
|
||||
│ └── TFS导入模板.xlsx # 默认模板:csproj 随构建拷到 exe 目录,「导出Excel模板」原样复制它
|
||||
│ └── TFS导入模板.xlsx # 默认模板:构建时嵌入 exe,「导出Excel模板」原样导出
|
||||
├── tools/
|
||||
│ ├── make_icon.py # 生成 app.ico(9 个尺寸帧,纯标准库 SDF 栅格化 + 手写 PNG/ICO)
|
||||
│ ├── pe_icon.py # 解析 exe 的 PE 图标资源,导出某帧 PNG(换图标后核对用)
|
||||
│ └── win_screenshot.py # 冒烟截图:拉起 exe、PrintWindow 抓窗、导出标题栏图标(ctypes)
|
||||
└── TfsExcelImporter/ # C# WinForms 桌面版(主用)
|
||||
├── TfsExcelImporter.csproj # net48 + ClosedXML + TFS ExtendedClient 14.*
|
||||
├── FodyWeavers.xml # Costura 单文件打包配置(便携版)
|
||||
├── NativeLibraryLoader.cs # 释放并预加载内嵌的 TFS native DLL
|
||||
├── AppIcon.cs # 从内嵌 app.ico 取 Form.Icon(窗口/任务栏)
|
||||
├── app.ico # 应用图标(16~256 共 9 档,tools/make_icon.py 生成)
|
||||
├── MainForm.cs # 导入 / 修 Area / 补挂父项流程
|
||||
├── MainFormUi.cs # 界面外壳:步骤卡片布局、手风琴折叠、状态呈现
|
||||
├── Theme.cs # 设计 token(颜色/字号/间距/缩放)与自绘控件
|
||||
@@ -56,7 +64,14 @@ dotnet build TfsExcelImporter.sln -c Release
|
||||
TfsExcelImporter\bin\Release\net48\TfsExcelImporter.exe
|
||||
```
|
||||
|
||||
「导出Excel模板」复制的是 exe 同目录的 `TFS导入模板.xlsx`(构建时自动拷过去);单独分发 exe 时要带上这个文件,否则该按钮会报「未找到默认模板文件」。
|
||||
「导出Excel模板」优先用 exe 同目录的 `TFS导入模板.xlsx`(现场可替换),没有则从 exe 内嵌资源导出——**分发时只带一个 exe 就够,不用再附带模板文件**。
|
||||
|
||||
应用图标是 `TfsExcelImporter/app.ico`(蓝色渐变圆角底 + 白色上升箭头),csproj 里 `ApplicationIcon` 写进 exe 的 Win32 图标资源,同时以托管资源再嵌一份给 `Form.Icon` 用(多尺寸帧,高 DPI 下不糊)。要改设计就改 `tools/make_icon.py` 后重跑,覆盖 `app.ico` 再编译:
|
||||
|
||||
```powershell
|
||||
python tools/make_icon.py # 重新生成 app.ico,并出预览图 tools/icon_preview.png
|
||||
python tools/win_screenshot.py TfsExcelImporter\bin\Release\net48\TfsExcelImporter.exe tools\_win.png
|
||||
```
|
||||
|
||||
界面按 4 步排:顶部状态条常驻显示服务器/项目/类型与连接状态,四张卡片一次只展开一张(展开一张会把其它收成一行摘要),预览表格永远占满剩余高度。
|
||||
|
||||
@@ -68,6 +83,28 @@ TfsExcelImporter\bin\Release\net48\TfsExcelImporter.exe
|
||||
|
||||
桌面版按 System DPI 感知实现,界面尺寸随 Windows 显示缩放换算;**改了显示缩放比例要重启程序**才生效。
|
||||
|
||||
### 便携版(单 exe,免安装)
|
||||
|
||||
构建产物只有一个文件:`TfsExcelImporter\bin\Release\net48\TfsExcelImporter.exe`(约 9.3 MB)。依赖和资源全部内嵌:
|
||||
|
||||
| 内容 | 打包方式 |
|
||||
| --- | --- |
|
||||
| 58 个托管 DLL(ClosedXML / OpenXml / TFS Client OM …) | `Costura.Fody` 内嵌,运行时经 `AssemblyResolve` 从内存加载,不落盘 |
|
||||
| `Microsoft.WITDataStore32/64.dll`(纯 win32,TFS OM 用) | 独立内嵌,启动时按进程位数释放到 `%TEMP%\TfsExcelImporter\native\{内容hash}` 并 `LoadLibrary` 预加载 |
|
||||
| 默认模板 `TFS导入模板.xlsx` | 内嵌资源,「导出Excel模板」时释放;exe 同目录放同名文件则优先用它 |
|
||||
| `config.json` | 首次保存时写到 exe 同目录(便携);目录只读时回退 `%AppData%\TfsExcelImporter\config.json` |
|
||||
|
||||
分发:
|
||||
|
||||
```powershell
|
||||
mkdir dist
|
||||
copy TfsExcelImporter\bin\Release\net48\TfsExcelImporter.exe dist\
|
||||
```
|
||||
|
||||
把 `dist\TfsExcelImporter.exe` 拷到任意目录双击即用。想连配置一起带走,就把 exe 同目录的 `config.json` 一起拷。
|
||||
|
||||
前提:目标机需有 .NET Framework 4.8(Win10 1903+ / Win11 系统自带,一般无需额外安装)。`FodyWeavers.xml` 是 Costura 的打包配置,删掉它或用 `-p:FodyDisable=true` 构建即回到「exe + 一堆 DLL」的普通输出。
|
||||
|
||||
### Python 版
|
||||
|
||||
```powershell
|
||||
@@ -84,6 +121,8 @@ python tfs_import.py --input other.csv --limit 5
|
||||
|
||||
## 配置说明
|
||||
|
||||
桌面版的配置落在 exe 同目录的 `config.json`(界面改动后自动写回);exe 目录不可写时回退到 `%AppData%\TfsExcelImporter\config.json`。
|
||||
|
||||
配置的语义、留空字段如何解析见 [tfs_import.py:49](tfs_import.py#L49) 与 [Config.cs](TfsExcelImporter/Config.cs),关键字段:
|
||||
|
||||
| 键 | 说明 |
|
||||
|
||||
Reference in New Issue
Block a user