目录
介绍
背景
使用代码
配置项目生成过程以交付已编译的DLL文件
类库代码
控制台应用程序,用于使用PizzaLib订购和交付比萨饼
兴趣点
本文介绍有关文本编辑器或Visual Studio Code中的C#编码,从另一个引用一个.NET项目并使用CSC命令行工具进行编译的方法。
如今,编写.NET C#应用程序已成为一个例行过程,这与编程的起源已大不相同——这是个人的爱好。对于具有12年以上开发C#.NET应用程序专业经验的技术专家而言,要充分利用现代代码编写增强功能的全部力量,例如ReSharper自动完成,调试器,Intellisense等。编码成为毫无意义的例程。那时,有时希望写出一段代码,而没有所有那些使软件开发成为自动化行业而不是个人爱好的东西。在DOS控制台中记录消息,牢记类型、局部变量、函数定义,通过启动应用程序测试每个函数——这就是本文的目的。
使用现代工具进行软件开发来编写代码,使用户感觉像是自己编写代码。在某些时候,使用原始的原生技术进行简单的编码可能具有一定挑战性。
毫无疑问,使用现代工具进行软件开发具有宝贵的利益和好处。总而言之:自动完成,调试器和智能感知使代码编写过程非常简单直接。但是,本文与这些现代工具的优缺点无关。本文简要介绍了如何使用原始DOS命令编写C#库和控制台应用程序,参考项目,使用CSC编译工具和Visual Studio Code(与任何其他文本编辑器相同)进行构建。
为什么要使用Visual Studio Code?因为它显示了具有项目结构的内置项目浏览器,从而简化了对项目文件的访问,所以它在代码编辑器中还具有简单的Terminal和Console部分。可以在同一应用程序窗口中编写代码并执行命令。与大型显示器结合使用时非常方便。对于C#开发人员而言,它没有通常的增强功能,例如拼写检查、智能感知、内置的可附加调试器、自动完成等。
为了制作一个最简单的.NET C#应用程序,需要做的一切——带有可编译C#代码的文本文件和用于将代码编译成二进制文件的CSC工具。CSC是处理文本C#代码并生成二进制代码(可执行文件或库)的编译器。MSBuild是一个实用程序,它允许对CSC编译器进行可读的配置。
为简单起见,我将创建一个利用(引用)该类库的类库和控制台应用程序。.NET Framework 3.5是运行时。
启动Visual Studio代码,按Ctrl +`打开终端。
mkdir PizzaLib
cd PizzaLib
mkdir .vscode
cd .vscode
type nul > tasks.json
cd ..
type nul > PizzaShop.cs
type nul > DeliveryService.cs
mkdir bin
在Visual Studio代码中打开该新项目(使用快捷键Ctrl + K Ctrl + O)。
然后双击/.vscode/tasks.json文件并配置构建过程:
{
"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
}
}
]
}
该tasks.json文件是一个配置文件,它是用来通过Visual Studio代码进行翻译、编译,编译之前提供最终的DLL文件或可执行程序集的动作。该文件中的每个Task节点都定义一个命令,例如shell(可以是bash脚本,CMD,PowerShell)或执行命令时要提供的参数列表的进程。配置选项:group-> kind->“build”将该任务定义为用于构建项目的默认任务(当按下Ctrl + Shift + B快捷键时)。
示例“PizzaLib.dll ”库负责烹饪比萨饼并将其交付给客户。应该定义两个类:PizzaShop.cs和DeliveryService.cs——一个用于订购和烹饪比萨饼,另一个用于将比萨饼交付给客户。
PizzaShop.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...");
}
}
}
DeliveryService.cs
using System;
namespace PizzaLib
{
public class DeliveryService
{
public void Deliver()
{
Console.WriteLine("Delivering to customer.");
}
}
}
编写代码后,就该配置构建任务了。按Ctrl + Shift + B来构建库。完成该工作,编译该库,并且可以由另一个应用程序(在这种情况下为控制台应用程序)引用该库。
打开Visual Studio Code的另一个实例,为控制台应用程序创建类似的结构。
mkdir PizzaConsoleTest
cd PizzaConsoleTest
mkdir .vscode
cd .vscode
type nul > tasks.json
type nul > launch.json
cd ..
type nul > PizzaConsoleTest.cs
mkdir bin
cd ..
使用快捷键Ctrl + K Ctrl + O在Visual Studio代码中打开该目录。
按照以下指南配置构建(task.json)和启动过程(launch.json):
task.json
{
"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
}
}
]
}
该文件与为PizzaLib项目配置的task.json几乎相同,但是请注意,/r CSC编译器选项如何定义引用的'PizzaLib.dll'库:/r : "../PizzaLib/bin/PizzaLib.dll“,”/PizzaLib/bin/PizzaLib.dll”。
launch.json
{
"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"
}
]
}
launch.json文件定义调试或执行编译的项目Visual Studio代码的配置选项。该文件对具有可执行输出的项目有效。它仅指定执行最终文件及其可选参数之前应采取的操作。在这种情况下,配置将定义名为“pizzaconsoletestbuild”的构建任务,以在启动最终的编译后的可执行文件之前执行。
好吧,让我们使用PizzaShop类库来烹饪和运送美味的比萨。将代码添加到PizzaConsoleTest.cs应用程序文件中:
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();
}
}
}
如果您仔细查看task.json文件,则CSC编译器配置为使用引用的库PizzaLib.dll,而剩下的事情是将该库复制到控制台应用程序的bin文件夹中,以使其在启动时可用。控制台应用程序执行:
copy /Y "..\..\PizzaLib\bin\PizzaLib.dll" "bin\PizzaLib.dll"
如果一切配置正确,只需按Ctrl + F5组合键即可执行控制台应用程序,并显示以下结果:
-------------------------------------------------------------------
You may only use the Microsoft .NET Core Debugger (vsdbg) with
Visual Studio Code, Visual Studio or Visual Studio for Mac software
to help you develop and test your applications.
-------------------------------------------------------------------
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应用程序变得极为困难。这种简单的做法只是一个兴趣点。具有现代编码增强功能的复杂开发环境为构建庞大的系统提供了更多的功能和灵活性。