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项目生成的项目的具体位置:

mac下搭建.net core环境_2020-03-12-09-38-40.png

设置如下:

 {
        "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解决方案,如何在解决方案中添加创建类库项目、控制台项目,接着介绍如何对已有的项目进行单元测试,最后还提及了调试的基本知识。

参考

Microsoft .NET Core Tutorials

标签: .net core, macos, vs code

添加新评论