默认模板之缺

在工作学习中,我们经常需要创建一些简单的控制台应用(Console App)去验证某个想法,或者作为小工具交付给其他同事。

通常我们的选择是 Visual Studio 自带的 Console App 模板,这个经典模板只有预设好的 csproj 文件和空荡荡的 Main 方法,偶尔还会附送一行 Console.WriteLine("Hello World!");,除此之外没有任何附加功能。

代码看起来大概是这样——

using System;
namespace ConsoleApp1
{
    class Program
   {
        static void Main(string[] args)
       {
            Console.WriteLine("Hello World!");
       }
   }
}

面对这如同白纸一样的模板,如果我们需要捕捉一下异常、调用一下异步方法、记录一下log呢?勤奋的你一定存有一些常用的经典代码片段和配置文件吧,那就一一复制进来呗……折腾了十来分钟后,终于可以开始写代码了……

N天之后,又需要新写个控制台应用了,我们再次重复一遍上述过程。

安装模板插件

受到 HTML5 Boilerplate 的启发,Visual Studio Marketplace 上也出现了一款叫做 C# Console App Boilerplate 的插件,顾名思义,就是在默认 Console App 模板基础上添加常用特性以解决痒点。

可以从 Visual Studio Marketplace 上直接下载 vsix 文件安装:https://marketplace.visualstudio.com/items?itemName=vej.20181111

也可以在 Visual Studio 2017 的 Extensions and Updates 中输入 C# Console App Boilerplate 搜索并安装:

安装完成后,通过 Visual Studio 再次新建 Project 时,就可以在 Visual C# 分类下找到 Console App Boilerplate 的两个新模板。

模板便利特性

通过 Console App Boilerplate 模板新建 Project 后,我们可以看到编辑器窗口中默认打开的 Main.cs 文件——

我们可以直接运行样例代码,也可以将 Work 方法中样例代码替换成我们的业务逻辑。样例代码直接运行的效果如下——

同样是控制台应用,那么它和经典的 Console App 模板究竟有何不同呢?我们打开 Program.cs 文件便可知晓——

  • 使用了 C# 7.1 中新引入的异步 Main 方法,用来放置业务逻辑的 Work 方法同样是异步的。调用异步方法时,可以直接使用 await 关键字,省去了我们之前在同步 Main 方法中做同样操作时附加的 .Wait() 甚至是 .ConfigureAwait(false).GetAwaiter().GetResult()的繁琐。

  • 预设的 log4net 配置了 RollingFileAppender 和 ColoredConsoleAppender 两个 Appender,前者可以在日志文件中额外记录下机器名称、进程的名称和 ID,后者确保在跨平台环境下日志依然“出彩”。

  • 整体的异常处理,针对 AggregateException 和 Exception 分别进行了捕捉和记录,并依此设置了 Exit Code。

  • Stopwatch 测量整体的运行时间并在最后一行日志中输出。

  • 修改代码页以支持 UTF-8 字符正常显示,如果需要显示汉字,在非中文的 Windows 中还需要额外地将 cmd.exe 的默认字体设置为 MingLiU / 新细明体 或其他CJK字体。

此外,无论是 .NET Core 还是 .NET Framework 版本的 csproj 文件都采用了 MSBuild 15.0 新引入的 project SDK 格式。新的格式不仅更简单清爽,也带来了很多方便的特性,这里不再赘述。

相关需求解法

在模板的基础上,如果需要解析复杂的命令行参数,可以考虑引入 NuGet 包 CommandLine.Net 进行解析。它的使用方法非常简单,GitHub 项目的一页 README 便已阐述清楚,亦支持跨平台。

反之,如果仅仅想运行几行代码,又不愿等 Visual Studio 启动呢?可以用浏览器打开 .NET Fiddle 直接尝试,它不仅支持最新的 .NET Framework 4.7.2 版本,还可以选择 Roslyn 2.0,而且在 C# 之外支持 F# 和 VB.NET。

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

超好用的C#控制台应用模板相关推荐

  1. c#控制台模拟dos_超好用的C#控制台应用模板

    默认模板之缺 在工作学习中,我们经常需要创建一些简单的控制台应用(Console App)去验证某个想法,或者作为小工具交付给其他同事. 通常我们的选择是 Visual Studio 自带的 Cons ...

  2. 超时尚的UI电子商务PSD分层模板,临摹学习必备

    用户体验或更准确地说,电子商务用户体验(UX)是所有UI的重要方面,在处理电子商务应用程序时是必需的.当前,电子商务业务变得越来越有竞争力,各种各样的选择使客户忠诚度成为无可挑剔的现象. UX主要是指 ...

  3. 20P27 Premiere预设70种超酷电影级白天黑夜调色预设模板

    20P27 Premiere预设70种超酷电影级白天黑夜调色预设模板下载 [预设介绍] 该Lumetri色彩预设包含70个用于Premiere Pro的超酷电影色彩预设.它包括白天或晚上的视频的不同预 ...

  4. 超美文艺产品介绍小清新PPT模板

    下面这篇文章内容中,小编将和大家分享得是主题为超美文艺产品介绍小清新PPT模板.这份PPT模板的模板样式是以白色作为背景颜色,在每个模板页面背景中都搭配了花的图片,使得整份PPT模板都透露出文艺气息. ...

  5. 分享12套超酷的后台管理员界面网站模板

    转自:http://www.chinaz.com/design/2012/1016/278455.shtml 今天我们带来了12套超棒的管理员专用网站模板,希望大家喜欢!在这些超棒的网站模板可以直接应 ...

  6. 【C语言】控制台参数模板

    文章目录 [C语言]控制台参数模板(仅作为博主此后方便查阅直接使用) 一.前言 二.代码 三.结果 [C语言]控制台参数模板(仅作为博主此后方便查阅直接使用) 一.前言 仅作为博主此后方便查阅直接使用 ...

  7. 推荐7款超棒的单页面网站设计模板。关键是!免费!!

    之前我们推荐过Bootstrap的实用开发教程和8款HTML5实现的特效和应用,反映非常强烈,很多前端爱好者纷纷要求多分享些类似的教程和模板.今天我们推荐的这7套单页面网站设计模板不仅带有独立的在线演 ...

  8. php 超炫 页面,dedecms织梦后台模板,超炫界面风格

    dedecms织梦后台模板,超炫界面风格 互联网收集,版权归原作者所有,请勿用于商业使用,仅供学习参考.将dede和include文件夹上传到你的网站根目录进行覆盖即可.(注:如果你的后台目录修改了的 ...

  9. NI labview2014/2015/2016的超快速入门教程之使用VI模板(培训一)

    先说说我的超快速入门,一共共讲五部分,每一部分内容是精华的东西,但都有大量图文说明,因此显得东西很多,仔细看下去,对于尚未入门的同学应该是收获很多的 培训一:使用VI模板   培训二:创建一个可安装的 ...

最新文章

  1. 【100题】第十六题(层序打印树的节点)
  2. php彩票平台,直播详情-阿森纳vs热刺-英超 20/21
  3. 基于kafka_2.11-2.1.0实现的生产者和消费者代码样例
  4. python 数据分析库_五个 Python 常用数据分析库
  5. 史上最全ClassLoader总结
  6. .htaccess 基础教程(四)Apache RewriteCond 规则参数
  7. 用 Javascript 验证表单(form)中多选框(checkbox)值
  8. linux 多进程 libusb,基于Ubuntu的STM32调试环境搭建
  9. 拓端tecdat|python中的copula:Frank、Clayton和Gumbel copula模型估计与可视化
  10. 机器人动力学——拉格朗日法
  11. arcgis中 shift数据重新定义投影_【更新82篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  12. AI+Science系列(一) :飞桨加速CFD(计算流体力学)原理与实践
  13. Maven的下载安装和配置阿里云镜像教程
  14. b3log-solo 部署到GAE上
  15. std::adjacent_find 用法
  16. 每日一题(二三)function Foo(){ Foo.a = function(){console.log(1); } this.a = function(){console.log(2)}) Fo
  17. Web Framworks 的决斗
  18. svn——“验证位置时发生错误”的解决办法
  19. 三 创建纵断面图和纵断面
  20. 解决路由环路问题的方法

热门文章

  1. Linux关机、重启命令
  2. Docker学习笔记
  3. exchange2013 owa-outlook界面语言
  4. 关于动态修改定时器的时间间隔
  5. 公司僵尸帐号引发了一系列的入侵事件-细说密码强度验证的重要性
  6. java集合学习笔记 ---Collections类对集合的处理
  7. Linux脚本利器sed
  8. 闲来没事写个记事本玩玩!!!
  9. Yahoo Mail,慢功出细活〔转载〕
  10. 如何计算 string 的 crc32 值 ?