如何在 VS Code 中开始使用 .NET Core 和 C#

2025-05-24

如何在 VS Code 中开始使用 .NET Core 和 C#

在Twitter上关注我,很高兴接受您对主题或改进的建议/Chris

本文将介绍如何使用 .NET Core(.NET 的跨平台版本)进行开发。我们将创建一个解决方案、一个库、一个控制台应用程序以及一个测试项目。当然,我们还会学习如何在终端中执行测试。

.NET 自 2001 年问世以来,许多开发人员都是通过 Visual Basic .NET 或 C# 与 Visual Studio 进行开发。当时他们使用的是 Windows。时代变了,跨平台已成为必需,.NET 和 Visual Studio 都支持 Windows、Linux 和 Mac。

在本文中,我们将介绍:

  • 安装 .NET Core和一些不错的扩展,例如 C#
  • 搭建解决方案
  • 添加类库并将其添加到解决方案
  • 添加测试项目并运行我们的测试
  • 添加控制台程序并使用我们的库
  • 使用 vscode-solution-explorer 扩展改进我们的 IDE

我们学习了哪些命令以及接下来要看什么,例如 ASP、Docker、Cloud

资源

 安装和设置

您要做的第一件事是安装 .NET Core。请转到此页面:

https://www.microsoft.com/net/download/core

安装完成后,您应该可以访问一个可以在终端中调用的命令行工具dotnet。您可以通过输入以下命令轻松查看可用的命令:

dotnet --help
Enter fullscreen mode Exit fullscreen mode

如上所示,命令相当多。我们将探索其中一些用于创建解决方案和项目的命令。

因为我们将使用 C# 和 VS Code,所以我建议下载 VS Code

https://code.visualstudio.com/download

在系统上安装 VS Code 后,请安装 C# 扩展。输入C#,它应该如下所示:

很好,现在我们已经设置完毕并准备好代码了:)

创建解决方案

我们要做的第一件事是创建一个解决方案。解决方案是我们用来跟踪所有相关项目的工具。作为一名经验丰富的 .NET 开发人员,您可能习惯于通过 Visual Studio 来完成此操作,但我们实际上将通过终端来完成。

我们将采取以下步骤:

  1. 为我们的解决方案创建一个目录
  2. 调用生成解决方案的命令

首先,让我们创建一个目录:

mkdir app
cd app
Enter fullscreen mode Exit fullscreen mode

您可以随意命名您的目录,app这只是一个例子。

接下来,让我们创建一个解决方案。我们使用以下命令执行此操作:

dotnet new sln
Enter fullscreen mode Exit fullscreen mode

sln是 的缩写solution,这将生成一个新的解决方案。因为我们位于app目录中,所以这会生成一个app.sln文件。

 创建库

接下来我们将生成一个库。库不再是一个可执行程序,而是一组我们在其他项目中引用的文件。

要创建库,我们需要在终端中输入以下内容(我们仍在app目录中):

dotnet new classlib -o library
Enter fullscreen mode Exit fullscreen mode

上面我们可以看到,我们的通用命令是dotnet new,后跟类型,在本例中是classlib,然后我们使用标志-o,最后一个参数是项目的名称。

让我们看看我们得到了什么:

我们看到目录library已创建。我们还看到我们获得了文件Class1.cs、项目文件library.csproj和目录obj。现在,让我们切换到 VS Code 并查看我们的文件。查看 att Class1.cs,它看起来像这样:


// Class1.cs

using System;

namespace library
{
  public class Class1
  {
  }
}
Enter fullscreen mode Exit fullscreen mode

它没有做太多的事情但它是有效的 C# 代码。

让我们通过添加解决方案来结束本节:

dotnet sln add library/library.csproj
Enter fullscreen mode Exit fullscreen mode

这会将以下条目添加到app.sln

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "library", "library\library.csproj", "{7F30581E-9BCD-46FB-B7A5-FC2A85DE1429}"
Enter fullscreen mode Exit fullscreen mode

目前,除了我们有一个了解我们的图书馆的解决方案之外,我们不会花太多时间考虑这个问题。

更新我们的图书馆

好的,我们需要在库项目中添加一些代码。我们将执行以下操作:

  1. 从 NuGet 存储库下载NuGet 包
  2. 在我们的库代码中引用我们的 NuGet 包
  3. 构建我们的代码

从 NuGet 存储库下载并使用包

https://www.nuget.org/

是一个大型(超过 16 万个库)的存储库,其中包含所有 NuGet 库。只需一条简单的命令即可下载此处的所有库。在本部分中,我们将获取一个名为 的特定库Newtonsoft.Json。这将使我们能够来回解析 JSON。要将此库纳入我们的解决方案,我们可以键入:

dotnet add library package Newtonsoft.Json
Enter fullscreen mode Exit fullscreen mode

上面的意思是我们将包添加Newtonsoft.Json到项目中library。命令应该像这样:

dotnet add [what project to add it to] package [name of package at nuget.org]
Enter fullscreen mode Exit fullscreen mode

有时您可能正在处理现有项目,或者您可能已获取最新的更改。无论哪种情况,您都可能缺少项目或解决方案正常运行所需的一些软件包。此时,您可以运行以下命令:

dotnet restore
Enter fullscreen mode Exit fullscreen mode

这将获取项目文件中指定为包引用的包csproj

更新我们的库代码

在您的库项目中,将文件更改Class1.csThing.cs并添加以下代码:

// Thing.cs

using static Newtonsoft.Json.JsonConvert;

namespace Library
{
  public class Thing
  {
    public int Get(int left, int right) =>
        DeserializeObject<int>($"{left + right}");
  }
}
Enter fullscreen mode Exit fullscreen mode

 建造

接下来我们需要编译代码。如果成功,将会生成一个所谓的.dll文件。这是 .NET 用于库的格式,代表动态链接库。

因此,让我们使用以下命令编译代码:

dotnet build
Enter fullscreen mode Exit fullscreen mode

如上图所示,我们得到一个library.dll

成功!

创建测试库

接下来我们将创建一个测试项目。所有代码都需要一定程度的测试,而最好的开始方式莫过于尽早设置测试。要创建测试项目,我们需要输入以下内容:

dotnet new xunit -o test-library
Enter fullscreen mode Exit fullscreen mode

xunit这将创建一个名为的测试项目test-library

添加引用

我们将我们的项目也添加到解决方案文件中:

dotnet sln add test-library/test-library.csproj
Enter fullscreen mode Exit fullscreen mode

这里的想法是测试我们项目中名为 的功能library。为了实现这一点,我们需要在项目library中添加对 的引用test-library,如下所示:

dotnet add test-library/test-library.csproj reference library/library.csproj
Enter fullscreen mode Exit fullscreen mode

编写测试

当我们创建我们的文件时,test-library我们也得到了一个名为UnitTest1.cscreated 的文件。我们来看看这个文件:


//UnitTest.cs

using System;
using Xunit;

namespace test_library
{
    public class UnitTest1
    {
        [Fact]
        public void Test1()
        {

        }
    }
}
Enter fullscreen mode Exit fullscreen mode

我们使用装饰器[Fact]来表明这是一个需要评估和运行的测试方法。让我们在旁边添加一些代码UnitTest.cs


//UnitTest.cs

using Library;
using Xunit;

namespace TestApp
{
    public class LibraryTests
    {
        [Fact]
        public void TestThing() {
            Assert.NotEqual(42, new Thing().Get(19, 23));
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

 运行我们的测试

我们现在准备运行测试并检查结果。

要运行测试,请输入:

dotnet test test-library/test-library.csproj
Enter fullscreen mode Exit fullscreen mode

我们使用该命令dotnet test,最后一个参数是在哪里找到测试项目的项目文件。那么我们得到了什么?

从上图可以看出,我们的测试运行失败了。它清楚地表明了这[Fail]一点。让我们看看为什么。预期结果不应该是 42。嗯,让我们Thing.cslibrary项目中检查一下实现情况:

public int Get(int left, int right) =>
        DeserializeObject<int>($"{left + right}");
Enter fullscreen mode Exit fullscreen mode

我们显然只是接受2输入参数并对其进行求和。那么 中的测试呢UnitTest1.cs

public void TestThing()
{
  Assert.NotEqual(42, new Thing().Get(19, 23));
}
Enter fullscreen mode Exit fullscreen mode

19+23不等于 42。等一下……它应该是Equal。我们来修改一下:

public void TestThing()
{
  Assert.Equal(42, new Thing().Get(19, 23));
}
Enter fullscreen mode Exit fullscreen mode

让我们重新运行测试:

dotnet test test-library/test-library.csproj
Enter fullscreen mode Exit fullscreen mode

让我们检查一下结果....

这次测试很成功。

成功! :)

控制台应用程序

接下来我们要创建一个控制台应用。你问为什么?因为我们想展示创建一个可复用库的整个思路,我们可以将它添加到任何地方,从测试项目到控制台项目。

让我们像这样生成我们的控制台项目:

dotnet new console -o console-app
Enter fullscreen mode Exit fullscreen mode

这给了我们一个可运行的项目,其中包含一个Program.cs作为入口点的文件。从技术上讲,入口点是一个名为的方法Main()


// Program.cs

using System;

namespace console_app
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

我们将该项目添加到解决方案文件中,如下所示:

dotnet sln add console-app/console-app.csproj
Enter fullscreen mode Exit fullscreen mode

添加并使用我们的库项目

下一步是开始使用我们的library项目,并使其成为我们项目的一部分console-app。因此,我们像这样添加依赖项:

dotnet add console-app/console-app.csproj reference library/library.csproj
Enter fullscreen mode Exit fullscreen mode

将上述内容解读为:

dotnet add [target project] reference [destination project]
Enter fullscreen mode Exit fullscreen mode

接下来我们需要将文件的代码更改Program.cs为以下内容:


// Program.cs

using System;
using Library;

namespace console_app
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine($"The answer is {new Thing().Get(19, 23)}");
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

接下来运行应用程序

dotnet run -p console-app/console-app.csproj
Enter fullscreen mode Exit fullscreen mode

我们使用项目中的代码创建了一个可运行的应用程序library

惊人的 :)

 调试

调试。这是使用 Visual Studio 的一大优势。它过去和现在都非常出色。我个人认为它是首屈一指的,那么 VS Code 的情况如何呢?

好吧,让我们看看如何调试,然后反思它做得如何。

现在,如果您打开的解决方案缺少调试所需的资源,VS Code 会要求您添加该资源。那么我怎么知道缺少什么呢?您应该有一个.vscode如下所示的目录:

就是这样?

Debug/Start Debugging好吧,你可以尝试从菜单中选择,test-library如果你查看调试窗口的末尾,你会发现它正在运行

现在,你可能想console-app在调试时真正运行项目。为此,我们需要进入launch.json目录.vscode。找到类似这样的条目:

{
  "name": ".NET Core Launch (console)",
  "type": "coreclr",
  "request": "launch",
  "preLaunchTask": "build",
  // If you have changed target frameworks, make sure to update the program path.
  "program": "${workspaceFolder}/test-library/bin/Debug/netcoreapp2.2/test-library.dll",
  "args": [],
  "cwd": "${workspaceFolder}/test-library",
  // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console
  "console": "internalConsole",
  "stopAtEntry": false
}
Enter fullscreen mode Exit fullscreen mode

我们需要更改属性"program"以指向我们的控制台应用程序以及"cwd"

现在它应该看起来像下面这样launch.json

然后选择菜单选项Debugging/Start Debugging,我们应该看到以下内容

好了,小伙子们,调试工作正在进行中 :)

所以,这次经历,嗯,首先发生的事情是,我注意到当我修改代码时,Program.cs断点没有被正确触发。这有原因的。查看 中的条目,launch.json我们发现有一个属性"preLaunchTask": "build",它指出了一个应该在调试之前运行的任务。这个任务位于 中tasks.json。查看该文件,我们注意到它看起来像这样:

{
  "label": "build",
  "command": "dotnet",
  "type": "process",
  "args": [
      "build",
      "${workspaceFolder}/test-library/test-library.csproj"
  ],
  "problemMatcher": "$tsc"
}
Enter fullscreen mode Exit fullscreen mode

是的,你说得对,我们在再次运行调试之前没有构建正确的项目。解决这个问题的方法是运行

dotnet build
Enter fullscreen mode Exit fullscreen mode

在终端或中,修复此任务并使其指向我们的console-app,如下所示:

如果你再次调试,一切正常。现在你对 VS Code 的工作原理有了更多的了解。

如果要我在这里提意见的话,我希望把这部分工作从我作为用户身上抽象出来。我更希望用一个插件来帮我做这件事。目前,我希望有一个解决方案资源管理器,就像我在 Visual Studio 中用到的那个。

 改进 IDE

如果您像我一样,在 .NET 平台上拥有超过 10 年的经验,那么您一定在寻找尽可能将其融入 Visual Studio 的方法。当然,您欢迎使用终端等新方法,但感觉您更想要一个 UI。那么,或许我应该使用真正的 Visual Studio?

嗯,有一个插件可以解决这个问题。它叫做vscode-solution-explorer。如果你安装它,你的项目就会突然变成这样:

右键单击某个项目将显示如下菜单:

我的自发反应是:)

这不是微软的官方扩展,但它非常好,如果你像我一样喜欢终端命令但有时只想要一个 UI,那么它值得一试。

概括

好吧,我们总结一下。我们对 .NET Core 的学习已经相当深入了。我们学会了如何使用dotnet核心做各种事情,从搭建不同类型的项目到创建解决方案、添加引用、构建代码到运行测试。功能相当丰富。

最后,我们还展示了一个插件,它为我们所有的终端命令提供了另一种方法。当然,它在后台运行我们的终端命令,所以学习 CLI 的使用方法绝对很有价值。:)

文章来源:https://dev.to/dotnet/how-you-can-get-started-with-net-core-and-c-in-vs-code-30gc
PREV
如何学习 .NET Core 和 C# 中的依赖注入
NEXT
WebAssembly 很简单——一个 Hello World 示例简介 WASM 中的第一个“Hello World”如何运行它结论视频