在现代软件开发工具的辅助下,编程似乎变得自动化,代码仿佛自己就能编写出来。然而,对于拥有超过12年专业经验的C#.NET应用开发者来说,有时可能会渴望回归编程的本质,体验没有自动化工具辅助的编程乐趣。本文将介绍如何使用DOS命令和Visual Studio Code编写一个简单的C#程序,包括创建类库和控制台应用程序,并使用CSC编译器进行编译。
现代软件开发工具,如自动补全、调试器和智能感知等,极大地简化了代码编写过程。但本文不讨论这些现代工具的利弊,而是简要描述如何使用原始的DOS命令,通过Visual Studio Code编写C#库和控制台应用程序,并使用CSC编译工具进行编译。
Visual Studio Code是一个轻量级的代码编辑器,它内置了项目浏览器,可以简化对项目文件的访问。它还具有简单的终端和控制台部分,可以在同一个应用程序窗口内编写代码和执行命令。这对于使用大屏幕的开发者来说非常方便。与C#开发者常用的增强功能不同,它没有拼写检查、智能感知、内置可附加的调试器、自动补全等功能。
要创建一个简单的.NET C#应用程序,只需要一个可编译的C#文本文件和CSC编译工具。CSC是处理文本C#代码并生成二进制代码(可执行文件或库)的编译器。MSBuild是一个实用工具,它允许为CSC编译器创建可读的配置。
打开Visual Studio Code,按下Ctrl+`打开终端。首先创建一个名为PizzaLib的文件夹,然后创建.vscode文件夹,并在其中创建tasks.json文件。接下来,创建PizzaShop.cs和DeliveryService.cs文件,并创建一个名为bin的文件夹。
{
"version": "2.0.0",
"tasks": [
{
"label": "pizzalibbuild",
"command": "C:\\Windows\\Microsoft.NET\\Framework\\v3.5\\CSC.exe",
"type": "shell",
"args": [
"/t:library",
"/out:bin/PizzaLib.dll",
"*.cs"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
PizzaLib.dll库负责制作披萨并将其交付给客户。需要定义两个类:PizzaShop.cs和DeliveryService.cs。PizzaShop.cs负责订购和制作披萨,而DeliveryService.cs负责将披萨交付给客户。
using System;
namespace PizzaLib
{
public class PizzaShop
{
public void OrderPizza()
{
Console.WriteLine("Pizza Mozzarella with cheese. Your order is being processed.");
}
public void CookPizza()
{
Console.WriteLine("Cooking delicious pizza...");
}
}
}
using System;
namespace PizzaLib
{
public class DeliveryService
{
public void Deliver()
{
Console.WriteLine("Delivering to customer.");
}
}
}
编写完代码后,需要配置构建任务。按下Ctrl+Shift+B构建库。构建完成后,库被编译,可以被另一个应用程序(在本例中为控制台应用程序)引用。
打开另一个Visual Studio Code实例,为控制台应用程序创建类似的结构。创建PizzaConsoleTest文件夹,并在其中创建.vscode文件夹和tasks.json文件。然后创建PizzaConsoleTest.cs文件,并创建一个名为bin的文件夹。
{
"version": "2.0.0",
"tasks": [
{
"label": "pizzaconsoletestbuild",
"command": "C:\\Windows\\Microsoft.NET\\Framework\\v3.5\\CSC.exe",
"type": "shell",
"args": [
"/r:\"../PizzaLib/bin/PizzaLib.dll\",\"../PizzaLib/bin/PizzaLib.dll\"",
"/out:bin/PizzaConsoleTest.exe",
"*.cs"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
{
"version": "0.2.0",
"configurations": [
{
"name": "PizzaConsoleTestLauncher",
"type": "clr",
"request": "launch",
"preLaunchTask": "pizzaconsoletestbuild",
"program": "${workspaceFolder}/bin/PizzaConsoleTest.exe",
"args": [],
"console": "internalConsole",
"stopAtEntry": false,
"internalConsoleOptions": "openOnSessionStart"
}
]
}
在PizzaConsoleTest.cs应用程序文件中添加代码,使用PizzaShop库来订购和交付美味的披萨。
using System;
using PizzaLib;
namespace PizzaConsoleTest
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Ordering Pizza with PizzaLib");
PizzaShop pizzaShop = new PizzaShop();
pizzaShop.OrderPizza();
pizzaShop.CookPizza();
DeliveryService deliveryService = new DeliveryService();
deliveryService.Deliver();
}
}
}
如果tasks.json文件配置正确,CSC编译器将使用引用的PizzaLib.dll库。接下来,需要将该库复制到控制台应用程序的bin文件夹中,以便在控制台应用程序执行时可用。
copy /Y "..\\..\\PizzaLib\\bin\\PizzaLib.dll" "bin\\PizzaLib.dll"
如果一切配置正确,按下Ctrl+F5将执行控制台应用程序,并显示以下结果:
Ordering Pizza with PizzaLib
Pizza Mozzarella with cheese. Your order is being processed.
Cooking delicious pizza...
Delivering to customer.
The program '[7152] PizzaConsoleTest.exe' has exited with code 0 (0x0).
命令行界面和简单的文本编辑器对于开发多模块、分布式的Web应用程序来说可能会非常困难,因为配置复杂和代码复杂性。这种简单的实践只是一个兴趣点。复杂的开发环境,具有现代编码增强功能,为构建庞大的系统提供了更多的能力和灵活性。