作为一名长期使用Windows平台的开发者,我发现在日常工作中经常需要重复处理各种琐碎任务:文件批量重命名、图片压缩转换、数据格式清洗、网页内容抓取等。虽然市面上有不少现成工具,但要么功能过于臃肿,要么缺少特定功能模块。于是萌生了用.NET 6开发一套高度定制化工具集的想法。
选择.NET 6主要基于三点考量:首先,作为LTS版本有长期支持保障;其次,跨平台特性让工具将来可移植到Linux环境;最重要的是,C#语言的强类型特性和丰富的类库能大幅提升开发效率。这套工具集目前包含12个常用功能模块,全部采用WPF+MVVM模式实现界面交互,核心算法则封装为独立类库。
提示:自用工具开发的关键在于明确真实需求。建议先用一个月记录日常工作痛点,再针对性开发,避免陷入"为了开发而开发"的陷阱。
采用分层架构设计,解决方案包含以下关键项目:
code复制MultiToolSolution/
├── CoreLib/ # 核心算法库(.NET Standard 2.1)
├── WPFApp/ # 主应用程序(.NET 6 WPF)
├── CLI/ # 命令行版本(.NET 6 Console)
└── Tests/ # 单元测试(NUnit)
csharp复制// 典型服务注册示例
services.AddSingleton<IFileService, AdvancedFileService>()
.AddTransient<IImageProcessor, MagickImageProcessor>()
.AddLogging(builder => builder.AddSerilog());
支持正则表达式重命名、哈希校验、属性修改等功能。关键实现点:
csharp复制public interface IRenameStrategy {
string GenerateNewName(string original);
}
public class RegexRenameStrategy : IRenameStrategy {
private readonly Regex _regex;
private readonly string _replacement;
public string GenerateNewName(string original) {
return _regex.Replace(original, _replacement);
}
}
基于Magick.NET库实现的功能:
注意事项:处理大图时务必使用using释放MagickImage对象,否则内存泄漏严重。实测处理100张4K图片,未释放的情况下内存会暴涨到2GB+。
常见报错:"调用线程无法访问此对象..."。推荐两种解决方案:
方案1:Dispatcher.Invoke
csharp复制Application.Current.Dispatcher.Invoke(() => {
progressBar.Value = currentProgress;
});
方案2:Binding+INotifyPropertyChanged
xaml复制<ProgressBar Value="{Binding ProgressValue}" />
通过BackgroundWorker+Progress报告实现:
csharp复制var worker = new BackgroundWorker {
WorkerReportsProgress = true
};
worker.DoWork += (s, e) => {
for(int i=0; i<100; i++) {
worker.ReportProgress(i);
Thread.Sleep(100);
}
};
worker.ProgressChanged += (s, e) => {
UpdateProgress(e.ProgressPercentage);
};
csharp复制using var image = new MagickImage();
image.Ping(filePath); // 仅读取元信息
if(image.Width > 5000) {
image.Settings.SetDefine(MagickFormat.Jpeg, "size", "50%");
}
使用WiX Toolset创建MSI安装包,关键配置:
xml复制<Feature Id="MainFeature" Title="Main Components" Level="1">
<ComponentGroupRef Id="MainComponents" />
<ComponentRef Id="DesktopShortcut" />
</Feature>
基于GitHub Releases的更新流程:
实际开发中发现,这套工具集不仅提高了个人工作效率,还意外成为了展示.NET技术能力的活简历。有几个模块经过通用化改造后,已经作为独立组件用在了商业项目中。