MacOS下使用VS Code创建第一个.NET core程序
0 .NET core环境的安装
- .NET SDK安装
.NET Core分为两部分,一个是运行时,另一个是开发工具包,二者区别如下:
.NET Runtime: 只能运行.NET Core程序,不能开发
.NET SDK: 能运行.NET Core程序,不能开发
既然我们是用来开发程序的,因此我们需要安装.NET SDK, 下载链接在这里
选择最新的版本,下载后双击安装即可。
- VS Code安装
安装完VS Code之后,还需要安装C#插件,这个比较简单,就不做说明了。
1. VS Code下创建程序
1.1 创建解决方案
在VS Code中,打开命令行,使用contrl+`快捷键打开命令终端,输入下面命令建立一个新的项目文件夹:
dotnet new sln -o golden
执行完毕之后,可以发现在当前文件夹下新建了golden目录,里面有golden.sln这个解决方案文件。
这时候,使用VS Code打开golden文件夹。
1.2 创建Library项目
接着进入golden目录下,我们创建一个library项目:
dotnet new classlib -o libray
完毕后发现在目录下新增了libray.csproj和Class1.cs文件,接着会自动执行dotnet restore命令,这个时候在library项目目录下会新增obj文件夹,至于新增的文件用途,我也暂时不知道。(哈哈,初学。。。)
这个时候可以使用tree命令查看目录结构,结果如下:
.
├── golden.sln
└── libray
├── Class1.cs
├── libray.csproj
└── obj
├── libray.csproj.nuget.cache
├── libray.csproj.nuget.dgspec.json
├── libray.csproj.nuget.g.props
├── libray.csproj.nuget.g.targets
└── project.assets.json
2 directories, 8 files
此时你会发现,到目前位置,.NET Core其实对比.NET framework来看,内容形式都是一致的,仅仅是为了实现跨平台,这里用的是命令行方式执行,比起在windows下图形操作确实有点难记。
最后,把当前工程加入的解决方案中
dotnet sln add libray/libray.csproj
最后来看下library.csproj文件的xml内容:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
- 为library工程添加第三方库引用
这里就用最常用的Newtonsoft.Json库为例,这个跟.NET framework相同,使用nuget方式添加:
dotnet add library package Newtonsoft.Json
这时可以看到library.csporj中添加了类库的引用信息:
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
</ItemGroup>
- 修改文件
将Class1.cs重命名为Thing.cs
using System;
using static Newtonsoft.Json.JsonConvert;
namespace library
{
public class Thing
{
public int Get(int left, int right) =>
DeserializeObject<int>($"{left+right}");
}
}
然后build:
dotnet build
不出意外,应该能提示你build成功。
1.3 添加单元测试
创建单元测试项目:
dotnet new xunit -o test-library
将项目添加到解决方案中:
dotnet sln add test-libray/test-library.csproj
因为我们是对library项目进行测试,所以需要添加library的引用:
dotnet add test-library/test-library.csproj reference library/library.csproj
执行后,我们看到test-library.csproj文件中添加了引用信息:
<ItemGroup>
<ProjectReference Include="..\library\library.csproj" />
</ItemGroup>
修改测试文件UnitTest1.cs, 重命名为LibraryTest.cs, 内容如下:
using System;
using Xunit;
using library;
namespace test_library
{
public class LibraryTest
{
[Fact]
public void TestThing()
{
Assert.NotEqual(23, new Thing().Get(2,3));
}
}
}
代码比较简单,就是测试调用Thing.Get方法,执行Get(2,3),期望的输出结果是不为23. 单元测试中常用的时Assert类,提供了很多判断的方法,读者可以自行查看其定义即可。
- 执行
dotnet restore
dotnet test test-library/test-library.csproj可以看到结果:
Test Run Successful.
Total tests: 1
Passed: 1
Total time: 1.4477 Seconds
说明测试成功。
为了验证我们的结果,我们把期望输出更改下,将上面的Assert.NotEqual方法改为Assert.Equal:
Assert.Equal(42, new Thing().Get(2,3));
编译,运行:
dotnet build
dotnet test test-library/test-library.csproj
这时候,可以看到执行失败的详细信息:
[xUnit.net 00:00:00.49] test_library.LibraryTest.TestThing [FAIL]
X test_library.LibraryTest.TestThing [8ms]
Error Message:
Assert.Equal() Failure
Expected: 42
Actual: 5
Stack Trace:
at test_library.LibraryTest.TestThing() in /Users/ray/code/golden/test-library/LibraryTest.cs:line 12
Test Run Failed.
Total tests: 1
Failed: 1
Total time: 1.2854 Seconds
结果上我们可以看出,测试失败的方法名、期望结果、世界结果,出错文件位置等。
2 创建控制台程序
这一部分,我们将创建一个调用library项目方法控制台程序,通过这一过程,我们可以看到对于之前代码我们可以在多个地方使用,这也是软件工程中一个重要的思想:软件复用。
首先,在golden目录下创建console工程:
dotnet new console -o app
添加项目到解决方案中:
dotnet sln add app\app.csproj
添加对library的引用:
dotnet add app/app.csproj reference library/library.csproj
修改Program.cs文件:
using System;
using library;
namespace app
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"result: {new Thing().Get(2,3)}");
}
}
}
使用dotnet run命令可以执行可执行文件,添加 -p 选项可以执行执行的项目,如执行下面命令后,你可以看到输入结果为5.
dotnet build
dotnet run -p app/app.csproj
好了,到此,一个完整的项目就算跑完了,基本上简单的程序上面的操作都足够了。但是往往我们在程序的编写过程中,都会遇到很多意想不到的结果,我们写出来的代码运行起来跟我们所想不一致。这个时候就需要对代码进行调试,来排查修改问题。
3 调试
第一次调试时,需要对VS Code进行配置,如下图,先打开调试器:(如果看不到如下界面,直接点击页面上的配置,就能打开luanch.json)
在下拉框中选择.NET Core lanuch, 这时会打开launch.json文件,我们需要指定要调试的程序,应为app是控制台程序,且我们在进行dotnet build之后来确定app.csproj项目生成的项目的具体位置:
设置如下:
{
"name": ".NET Core Launch (console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "${workspaceFolder}/app/bin/Debug/netcoreapp3.1/app",
"args": [],
"cwd": "${workspaceFolder}",
"stopAtEntry": false,
"console": "internalConsole"
}
其中:${workspaceFolder}指的时当前方案目录,就是这里的golden目录。
而控制台程序app编译后生成的可执行文件app目录是: golden/app/bin/Debug/netcoreapp3.1/app
因此按上面配置即可。
调试相关
- F9 设置/取消断点
- F10 逐行执行(若有方法,不进入)
- F11 逐行执行(若有方法,进入)
- F5 恢复执行(执行到下一个断点)
有上面几个基本就足够了。 首先在Program.cs文件中的Console.WriteLine行添加断点,可以在该行的最左侧单击或者直接F9设置,设置之后有个红色的小点就是断点了。
所谓断点,就是在调试模式下,当程序执行到这一行时,会暂停,让你能观察到当前的程序状态(各个变量的值),然后以单步运行的方式观察程序运行现象来排除问题的作用。
设置好后,点击左上角的启动,可以看到程序会在Console.WriteLine这一行停住,这时候红色点会变成黄色,表示程序运行到此了。
此时,你可以多次尝试看下F10,F11,F5的区别,并注意每一步VSCode中各个窗口的显示情况。
总结
本文介绍了在MacOS下使用VS Code如何创建VS解决方案,如何在解决方案中添加创建类库项目、控制台项目,接着介绍如何对已有的项目进行单元测试,最后还提及了调试的基本知识。