个人对C#控制台应用程序在运用方面的总结

C#控制台应用程序有什么用?这里博主结合了自己的工作经验和日常编程所接触到相关知识,总结了下自己对C#控制台应用程序在运用方面的理解。由于受到本身的技术水平影响,文章必然存在局限性,希望能给看到文章的朋友提供点思路,控制台肯定还能运用在更多方面和实现更加强大的功能!

利用C#控制台程序实现维护/自动化的小工具

这里我会列举出一些自己曾经遇到过的案例,其实一些比较简单的自动化操作是可以使用批处理脚本进行操作,但对于一些复杂点的业务逻辑操作,编写小工具就十分适用。

案例一,网站后台定时维护任务,使用C#控制台应用程序+Quartz.NET+Topshelf,简直是神器组合!就从本站举例,博客的后台维护服务程序就是用这种方法实现的,功能包括

  1. 数据库定时差异/完整备份,由于博客使用的数据库是sql express,不支持维护计划功能,只能自己编写相关定时备份功能。
  2. 数据分析整理,每天需要统计一次这些数据:博客评论数、浏览量、文章数,过滤非法评论等。
  3. 每天发送网站日志的邮件报告,另外还有各种邮件定时发送任务。
  4. 每天自动更新和静态化RSS源的XML文件、网站地图sitemap的xml文件、错误页面等,之前由于打算做全站静态化,所以还有全站静态化的操作。

利用开源调度框架和开源宿主服务器框架配合C#控制台实现服务程序

通过C#控制台实现的后台服务功能截图 

备注:

  1. Quartz.NET,开源作业调度框架,开源定时任务调度框架。
  2. Topshelf,快速的开发、调试和部署windows服务的开源框架,开源的跨平台的宿主服务框架。简单来说,就是可以通过控制台应用程序部署出一个Windows服务,也可以用控制台的运行方式调试服务程序。
  3. 感兴趣的朋友可以上网了解下这两个开源框架,搭配使用十分强力,真的比以前传统的windodws服务开发方便快捷!!
  4. 这里贴下十有三博客网站后台服务程序的项目结构,只是一个简单小巧的服务程序,主要就是基于控制台程序:

基于C#控制台的服务程序


案例二、各种与系统/服务器打交道大批量操作,比如通过调用系统API或其他API解决某些需要自动化的问题,或者解决某些业务逻辑复杂的IO操作等。

先举个我通过IIS的API来批量绑定域名的例子,IIS提供了一个强大的API:Microsoft.Web.Administration,通过这个API,我解决了一个累人的高重复性的傻瓜式的手动工作:在IIS上创建上千个网站并绑定域名。如果手动操作估计都要好多天,当时感觉整个人都不好了!还好通过控制台调用API开发了一个自动建站并绑定域名的功能,一个下午就解决了问题,具体业务逻辑这里就不多说了,感兴趣的朋友可以自己去了解下这个强大接口,可以很方便的对IIS进行管理。这篇文章可以参考下:How to Use Microsoft.Web.Administration

C#控制台引用程序调用IIS API 批量绑定域名

另外我还经常使用控制台实现类似批量操作文件/目录,EXCEL批量处理操作,批量文件或者文本内容处理等IO操作功能。比如我曾经遇到需要对上万个txt文本文件进行过滤、分类和筛选的问题,这部分用的最多的就是System.IO命名空间下的类库。具体情况是这样的,首先要对所有的文本文件内容进行过滤,通过正则和其他方法,替换和删除掉不符合要求的内容,除此之外还要删除内容字数少的以及空白内容的文本文件。然后通过一定的算法来分析文本内容,并将文件进行分类并放入对应的文件夹中。

C#控制台批量IO操作处理上万个txt文件C#运用之小工具运行界面一小工具运行界面二


案例三、数据库操作小工具,这部分与维护有关,一般情况下是不需要编写这类型的小工具的,除非情况特殊,无法通过数据本身提供的工具处理。另外有些数据库本身就没有便利的可视化操作工具,这类型的数据库只能自己写小工具实现相关维护功能了,比如MongoDb。

先说说MongoDb,这段时间经常使用MongoDb,作为热门的非关系数据库,其实还有很多不方面的地方,简单来说,只要遇到稍微复杂的数据修改操作就够你头疼了。虽然本身有提供JavaScript shell,但我觉得并不好使,我更喜欢使用控制台配合官方提供的C#驱动去解决复杂的数据维护操作,逻辑简洁明了,还很容易进行调试。

在说说其他的数据库维护操作,复杂点的情况我习惯使用C#控制台编写一次性的小工具来处理,像MySql,MS SQL Server等数据虽然有提供类似游标的强大功能,但是我对数据库的熟练程度肯定比不上C#,所以习惯用控制台搞个小工具来解决。此外,一些业务逻辑错综复杂的,也真的只能自己编写代码来处理(比如要对数据库中上万篇文章内容进行处理,涉及到调用外部分词类库,利用正则替换,关键词匹配分析等)。这也算是一种我对代码优先想法的实现吧,毕竟我也不是专业的DBA。


案例四,编写自动化测试功能,我常用于测试各种API的调用,使用控制台程序来实现自己的测试需求是非常合适的。

2012年的时候,曾在电子商务的公司工作,常常需要与各种API打交道,有快递物流的、短信的、各大电子商务平台等等,每次都使用控制台进行功能测试,调用核心类库执行指定功能,比如测试淘宝的订单接口,当时是利用线程进行异步操作,通过订单接口,实现每隔几分钟获取店铺的新订单。通过控制台可以很容易监控相关结果,当然每步操作都是有记录在日志系统中的。现在遇到类似的需求都是使用开源的定时任务调度框架,比自己写线程和异步做定时任务简单多了。

将C#控制台程序运用于演示、练习、学习

每当有新的技术、新的问题出现,控制台都能直观简便的演示出我们需要的效果。像之前C# 6.0刚刚发布,我就使用控制台项目测试新特性。还有平常如果要测试和研究一些类库,临时想要实现某些小功能,我也都是用这种方式来处理。

强烈推荐看下这篇文章:

C#: Building a Useful, Extensible .NET Console Application Template for Development and Testing

以前自己用于演练的小项目,都是杂乱无章的放在文件夹中,看完这篇文章,最近打算根据文章提供的思路,运用反射整合成一个小型的演示系统!

在学习.NET技术过程中控制台应用程序确实功不可没,就像我大学那会刚刚开始接触C#编程,基本上所有入门书籍的范例和演示都是使用Console Application,我就是在C#的控制台应用程序上打印出最经典的Hello World!!!这阶段最遗憾的是老师从未提过控制台更加高级的运用方法,导致那时对控制台并不是那么的感兴趣。

小结下C#控制台应用程序适用的情景

文章上述中提到的例子,其实也可以使用如WPF、Windows Forms和ASP.NET等技术去实现,只不过CLI/CUI界面与GUI界面相比还是具有特定优势的,这里小结几点适合使用控制台程序的地方:

  1. 一般来说使用者是自己,或者其他技术人员,否则就要考虑开发GUI界面,利于用户体验。
  2. 只需要清晰的数据输入输出即可,对UI没有太多需求,也就是要求高效便捷,简单明了(图形用户界面的开发与之相比更加费时费力)。
  3. 主要面向服务器和系统的运维、测试和自动化操作功能,
  4. 用于开发某些简单自用的小工具,用完即丢,利于提高效率。

另外,除了在C#方面的运用,控制台的运用其实是很广泛的,很多开源软件、工具、数据库的操作方式都有运用控制台(CUI/CLI界面),像MongoDb,git,MySql,浏览器控制台等。另外常玩单机游戏的朋友就会发现很多游戏都自带控制台,例如CS1.6,辐射4之类的,可以让玩家进行更加自由的操作游戏。

总结:

C#控制台应用程序具有实用、简洁、方便等强大的特性。作为一名.NET程序员,我一直将控制台程序使用在自动化操作、维护操作、自动化测试和代码演练等方面。由于自身技术水平的限制,目前文章所表达的都是较为粗糙的理解,希望能给看到文章的朋友提供点思路。

题外话:

最近微软在跨平台和开源方面越发给力,很早之前还宣布要发布Linux版SQL Server,Linux大家都知道最经典的操作方式就是控制台,我也打算开始学习相关技术。




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98900.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论