feat: 增强便携版支持与配置管理

- 更新 .gitignore 文件,添加便携版分发目录和 Fody 生成的配置文件。
- 修改 README.md,详细说明便携版的构建与分发流程,强调单文件分发的优势。
- 在 Config.cs 中实现便携配置管理,优先使用 exe 同目录的 config.json,提升用户体验。
- 更新 ExcelService.cs,优化默认模板的导出逻辑,支持现场替换模板文件。
- 在 MainForm.cs 中加载应用图标,提升界面一致性。
- 调整 Program.cs,确保在单文件分发时正确加载 native DLL。
This commit is contained in:
chenshoulin
2026-11-01 20:17:56 +08:00
parent afed57047a
commit d055b415fa
17 changed files with 965 additions and 20 deletions
+26 -4
View File
@@ -11,6 +11,10 @@
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<!-- System DPI 感知:界面像素尺寸按 Theme.Px() 换算,见 app.manifest -->
<ApplicationManifest>app.manifest</ApplicationManifest>
<!-- exe 图标(资源管理器/任务栏/快捷方式)。多尺寸 ICO 由 tools/make_icon.py 生成 -->
<ApplicationIcon>app.ico</ApplicationIcon>
<!-- 便携单文件:Costura 把所有依赖 DLL 嵌入 exe,运行时自动解析 -->
<SatelliteResourceLanguages>en</SatelliteResourceLanguages>
</PropertyGroup>
<ItemGroup>
@@ -22,16 +26,34 @@
<PackageReference Include="Microsoft.TeamFoundationServer.ExtendedClient" Version="14.*" />
<!-- 无需安装 VS 也可用 dotnet build 编译 net48 -->
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.3" PrivateAssets="all" />
<!-- 单文件打包:把所有引用 DLL(含 native WITDataStore)嵌进 exe -->
<PackageReference Include="Fody" Version="6.8.2" PrivateAssets="all" />
<PackageReference Include="Costura.Fody" Version="5.7.0" PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
<None Update="config.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<!-- 默认导入模板:随 exe 一起发布,「导出Excel模板」原样复制这份文件 -->
<Content Include="..\templates\TFS导入模板.xlsx" Link="TFS导入模板.xlsx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<!--
图标同时以「托管资源」嵌一份:窗口标题栏/任务栏用 Form.Icon,
从内嵌 ICO 取可以得到全部 9 个尺寸帧;若走 Icon.ExtractAssociatedIcon
只能拿到系统默认那一档,高 DPI 下会糊。
-->
<EmbeddedResource Include="app.ico" LogicalName="app.ico" />
<!-- 默认导入模板:嵌入 exe,「导出Excel模板」时释放出来;exe 同目录存在同名文件时优先用它(便于现场替换模板) -->
<EmbeddedResource Include="..\templates\TFS导入模板.xlsx" Link="TFS导入模板.xlsx" />
<!--
TFS Client OM 的 native DLL(NuGet 包 lib\native\{amd64,x86})。
Costura 只嵌托管程序集,这两个是纯 win32 DLL,单独嵌入,
启动时由 NativeLibraryLoader 释放到临时目录并预加载。
-->
<EmbeddedResource Include="$(NuGetPackageRoot)microsoft.teamfoundationserver.extendedclient\*\lib\native\amd64\Microsoft.WITDataStore64.dll">
<LogicalName>native.Microsoft.WITDataStore64.dll</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="$(NuGetPackageRoot)microsoft.teamfoundationserver.extendedclient\*\lib\native\x86\Microsoft.WITDataStore32.dll">
<LogicalName>native.Microsoft.WITDataStore32.dll</LogicalName>
</EmbeddedResource>
</ItemGroup>
</Project>