大多数人,都低估了编程学习的难度,而高估了自己的学习能力和毅力。
当前系列: C#语法 修改讲义

为什么

初学入门都是用控制台项目?

特点:输入和输出(界面)都是一个控制台(黑窗体),简单!

对比Web项目,输入和输出至少需要学习HTML

PS:控制台不一定是黑窗体,只要有一个简单界面就行。之前在浏览器中F12演示,也是用的控制台。

入口函数

新建的控制台项目只有一个Program.cs,这是一个类(后文详述)

类里面有一个函数Main(),这个函数被称之为入口函数,即:代码跑起来之后首先运行这个函数。

所以,如果你的代码没有运行,检查一下是否被(直接/间接)被入口函数调用。

PS:如果一个项目没有入口函数,只有一个一个的类,这种项目又被称之为类库(class libary)项目

输入/输出

实事求是的说,控制台项目并不是一个“用户交互友好”的项目,它的输出输入非常简单:

  • Console.WriteLine("源栈欢迎你"):把括号里面的内容(源栈欢迎你)输出到控制台窗口
  • Console.ReadLine():接收用户在控制台窗口输入的内容

所以它通常只用于:

  • 学习C#语法
  • 一些自动运行(后文详述)的小程序


错误和警告

VS用:

  • 红色波浪线表示错误(error)
  • 绿色波浪线表示警告(warning)
如果项目中有错误,项目是“跑”不起来的;但如果只是警告,项目还可以运行。

把鼠标放在错误的代码上面,还可以看到更具体的内容(现在看不懂没关系,但要努力的看,养成习惯慢慢来,^_^)

错误和警告还可以在Error List窗口中看到:

注意区分:

  • IDE智能检查:代码一写错,马上就波浪线提示。源代码并没有被真正编译(复习),只是IDE按语法进行的分析检测……
  • 编译时错误: 源代码真正被编译,编译通不过,报出来的错误

强调这个,是为了让大家理解:

  1. IDE不一定能检查出所有的编译时错误
  2. C#程序运行之前有一个“编译”的过程的


Build

又称之为“生成”,本质就是“编译”

Release和Debug

在VS的工具栏上,还有这么一个选项:

这决定了VS如何编译你的项目:

  • Debug:以“调试模式”进行编译。如果要想进行调试(复习),只能选择这种模式。主要运用于开发阶段
  • Release:以“发布模式”进行编译。这样没有包含调试信息,程序会运行得更快,但无法调试。主要运用于开发结束之后,跑在生产环境中。

build项目,快捷键Ctrl+Shift+B,或者在项目上右键点击:

  • build:编译项目。点击build之后,就可以在output窗口中发现:
  • rebuild:重新编译项目。为什么需要“重新”编译?
    因为在build的时候,VS会智能检查:和上次编译相比,源代码是否发生改变。如果没有变化,VS就不会再次编译:

    一般情况下,这没有问题,但有时候VS“智能”变“智障”,我们就可以强制要求重新编译!
  • clean:删除bin和obj文件夹下所有编译后文件。如果clean都无法解决问题,我们可以更直接粗暴的删除obj和bin文件夹

bin和obj

VS会把控制台项目编译后文件放置在bin文件夹中,把调试用信息放置在obj文件夹中(复习:VS中查看隐藏文件

演示:

  • 按Debug和Release分开组织
  • obj中更多的文件内容
  • 独立运行.exe文件


运行和调试

有两种方式可以先让代码“跑”起来:(注意:设置起始项目

  • Ctrl+F5:调试的运行
  • F5:调试运行,所以不能选择release的build模式

说明:运行(F5或Ctrl+F5)项目其实包含了两个过程:
  1. 编译C#源代码
  2. 运行编译后代码

调试用快捷键

F9:断点切换:快捷键

F10:执行下一条语句

F5:执行完剩下的全部代码,直到程序结束或下一个断点

F11:进入当前语句的内部调用代码

Ctrl+Shift+F9:取消所有断点。

VS中同样可以进行条件断点调试


条件编译符

有一些代码可能是仅在调试时才需要执行的,发布之后就不需要了(可能浪费性能等)……

能不能在每次发布之前注释掉这一行代码?可以,但是这不是最佳方案,因为:

  • 开发人员可能不愿意发布人员直接修改源代码
  • 可能会忘记遗漏掉这一步骤
  • 项目中可能有多个类似的地方需要修改

所以,需要引入:

#if DEBUG
                //仅在调试状态使用
                .EnableSensitiveDataLogging(true)
#endif

这就告诉编译器:如果(#if)项目中定义了DEBUG,就编译(#if...#endif)之间的代码;否则,就直接略过。

DBUG是一个“预定义”的、特殊的常量,可以由VS中的编译选择器决定:

演示:选择Release代码块变灰

查看.csproj文件,可以看到:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <DefineConstants>DEBUG;TRACE;PUBLISH</DefineConstants>
    <PlatformTarget>x64</PlatformTarget>
  </PropertyGroup>

除了预定义的:DEBUG/TRACE,还可以自定义其他常量(constant),比如:FakeEmail。

条件编译符常量又有两个地方可以声明

  • 定义在项目属性/.csproj中,影响整个project的
  • 定义在单个文件中(.cs类文件顶部)的,只影响该文件
    #define FakeEmail
    using System;


任务计划

windows系统下一个可以定时自动启动某程序的小工具。

在我们Web开发中可能会用到,比如在服务器上每天定时清理/统计/发送email……这些任务一般可以由控制台程序完成。

演示:

  • 将.exe所在文件夹移到桌面
  • 打开windows任务计划工具
  • 指定运行时间和该.exe文件


作业

  1. 在一个solution下面新建两个控制台项目:
    1. PractiseInClass:课堂练习
    2. Homework:课后作业
  2. 在Homework中新建一个文件夹:JsHomework,将之前的作业按课时分文件的放入(演示)
  3. 能设置启动项,并在代码中设置一个断点,运行项目,击中断点
  4. build/rebuild/clean项目,并查看obj和bin文件夹中内容
  5. 能在obj和bin文件夹中生成Release文件夹,并解释为什么
接下来,学习Git并用它提交作业……

学习笔记
源栈学历
今天学习不努力,明天努力找工作

作业

觉得很 ,不要忘记分享哟!

任何问题,都可以直接加 QQ群:273534701

在当前系列 C#语法 中继续学习:

多快好省!前端后端,线上线下,名师精讲

  • 先学习,后付费;
  • 不满意,不要钱。
  • 编程培训班,我就选源栈

更多了解 加:

QQ群:273534701

答疑解惑,远程debug……

B站 源栈-小九 的直播间

写代码要保持微笑 (๑•̀ㅂ•́)و✧

公众号:源栈一起帮

二维码