如何在 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 应用程序
托管 .NET Core 应用程序的方法有很多,Windows、Azure 等。 -
将您的 .NET Core 应用程序发布到云
让我们学习如何将我们的 .NET Core 应用程序发布到云和 Azure。 -
注册一个免费的 Azure 帐户
要使用 Azure,您需要一个免费的 Azure 帐户 -
Hello World 教程 - 控制台应用程序
这展示了一个简单的 Hello World 控制台应用程序 -
将 .NET Core 应用程序容器化
这解释了如何将您的应用程序 Docker 化、如何编写 Dockerfile 等。 -
.NET Core 中的单元测试
单元测试有多种选择 -
dotnet CLI - 所有命令
该工具有很多命令dotnet
。你知道吗,例如,你可以用 React 前端搭建一个 .NET 项目? -
使用 ASP 和 .NET Core 创建新的 Web 应用程序
在 .NET Core 中创建您的第一个 Web 应用程序的精彩教程
安装和设置
您要做的第一件事是安装 .NET Core。请转到此页面:
安装完成后,您应该可以访问一个可以在终端中调用的命令行工具dotnet
。您可以通过输入以下命令轻松查看可用的命令:
dotnet --help
如上所示,命令相当多。我们将探索其中一些用于创建解决方案和项目的命令。
因为我们将使用 C# 和 VS Code,所以我建议下载 VS Code
在系统上安装 VS Code 后,请安装 C# 扩展。输入C#
,它应该如下所示:
很好,现在我们已经设置完毕并准备好代码了:)
创建解决方案
我们要做的第一件事是创建一个解决方案。解决方案是我们用来跟踪所有相关项目的工具。作为一名经验丰富的 .NET 开发人员,您可能习惯于通过 Visual Studio 来完成此操作,但我们实际上将通过终端来完成。
我们将采取以下步骤:
- 为我们的解决方案创建一个目录
- 调用生成解决方案的命令
首先,让我们创建一个目录:
mkdir app
cd app
您可以随意命名您的目录,app
这只是一个例子。
接下来,让我们创建一个解决方案。我们使用以下命令执行此操作:
dotnet new sln
sln
是 的缩写solution
,这将生成一个新的解决方案。因为我们位于app
目录中,所以这会生成一个app.sln
文件。
创建库
接下来我们将生成一个库。库不再是一个可执行程序,而是一组我们在其他项目中引用的文件。
要创建库,我们需要在终端中输入以下内容(我们仍在app
目录中):
dotnet new classlib -o library
上面我们可以看到,我们的通用命令是dotnet new
,后跟类型,在本例中是classlib
,然后我们使用标志-o
,最后一个参数是项目的名称。
让我们看看我们得到了什么:
我们看到目录library
已创建。我们还看到我们获得了文件Class1.cs
、项目文件library.csproj
和目录obj
。现在,让我们切换到 VS Code 并查看我们的文件。查看 att Class1.cs
,它看起来像这样:
// Class1.cs
using System;
namespace library
{
public class Class1
{
}
}
它没有做太多的事情但它是有效的 C# 代码。
让我们通过添加解决方案来结束本节:
dotnet sln add library/library.csproj
这会将以下条目添加到app.sln
:
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "library", "library\library.csproj", "{7F30581E-9BCD-46FB-B7A5-FC2A85DE1429}"
目前,除了我们有一个了解我们的图书馆的解决方案之外,我们不会花太多时间考虑这个问题。
更新我们的图书馆
好的,我们需要在库项目中添加一些代码。我们将执行以下操作:
- 从 NuGet 存储库下载NuGet 包
- 在我们的库代码中引用我们的 NuGet 包
- 构建我们的代码
从 NuGet 存储库下载并使用包
是一个大型(超过 16 万个库)的存储库,其中包含所有 NuGet 库。只需一条简单的命令即可下载此处的所有库。在本部分中,我们将获取一个名为 的特定库Newtonsoft.Json
。这将使我们能够来回解析 JSON。要将此库纳入我们的解决方案,我们可以键入:
dotnet add library package Newtonsoft.Json
上面的意思是我们将包添加Newtonsoft.Json
到项目中library
。命令应该像这样:
dotnet add [what project to add it to] package [name of package at nuget.org]
有时您可能正在处理现有项目,或者您可能已获取最新的更改。无论哪种情况,您都可能缺少项目或解决方案正常运行所需的一些软件包。此时,您可以运行以下命令:
dotnet restore
这将获取项目文件中指定为包引用的包csproj
。
更新我们的库代码
在您的库项目中,将文件更改Class1.cs
为Thing.cs
并添加以下代码:
// Thing.cs
using static Newtonsoft.Json.JsonConvert;
namespace Library
{
public class Thing
{
public int Get(int left, int right) =>
DeserializeObject<int>($"{left + right}");
}
}
建造
接下来我们需要编译代码。如果成功,将会生成一个所谓的.dll
文件。这是 .NET 用于库的格式,代表动态链接库。
因此,让我们使用以下命令编译代码:
dotnet build
如上图所示,我们得到一个library.dll
成功!
创建测试库
接下来我们将创建一个测试项目。所有代码都需要一定程度的测试,而最好的开始方式莫过于尽早设置测试。要创建测试项目,我们需要输入以下内容:
dotnet new xunit -o test-library
xunit
这将创建一个名为的测试项目test-library
。
添加引用
我们将我们的项目也添加到解决方案文件中:
dotnet sln add test-library/test-library.csproj
这里的想法是测试我们项目中名为 的功能library
。为了实现这一点,我们需要在项目library
中添加对 的引用test-library
,如下所示:
dotnet add test-library/test-library.csproj reference library/library.csproj
编写测试
当我们创建我们的文件时,test-library
我们也得到了一个名为UnitTest1.cs
created 的文件。我们来看看这个文件:
//UnitTest.cs
using System;
using Xunit;
namespace test_library
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}
我们使用装饰器[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));
}
}
}
运行我们的测试
我们现在准备运行测试并检查结果。
要运行测试,请输入:
dotnet test test-library/test-library.csproj
我们使用该命令dotnet test
,最后一个参数是在哪里找到测试项目的项目文件。那么我们得到了什么?
从上图可以看出,我们的测试运行失败了。它清楚地表明了这[Fail]
一点。让我们看看为什么。预期结果不应该是 42。嗯,让我们Thing.cs
在library
项目中检查一下实现情况:
public int Get(int left, int right) =>
DeserializeObject<int>($"{left + right}");
我们显然只是接受2
输入参数并对其进行求和。那么 中的测试呢UnitTest1.cs
?
public void TestThing()
{
Assert.NotEqual(42, new Thing().Get(19, 23));
}
19
+23
不等于 42。等一下……它应该是Equal
。我们来修改一下:
public void TestThing()
{
Assert.Equal(42, new Thing().Get(19, 23));
}
让我们重新运行测试:
dotnet test test-library/test-library.csproj
让我们检查一下结果....
这次测试很成功。
成功! :)
控制台应用程序
接下来我们要创建一个控制台应用。你问为什么?因为我们想展示创建一个可复用库的整个思路,我们可以将它添加到任何地方,从测试项目到控制台项目。
让我们像这样生成我们的控制台项目:
dotnet new console -o console-app
这给了我们一个可运行的项目,其中包含一个Program.cs
作为入口点的文件。从技术上讲,入口点是一个名为的方法Main()
:
// Program.cs
using System;
namespace console_app
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
我们将该项目添加到解决方案文件中,如下所示:
dotnet sln add console-app/console-app.csproj
添加并使用我们的库项目
下一步是开始使用我们的library
项目,并使其成为我们项目的一部分console-app
。因此,我们像这样添加依赖项:
dotnet add console-app/console-app.csproj reference library/library.csproj
将上述内容解读为:
dotnet add [target project] reference [destination project]
接下来我们需要将文件的代码更改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)}");
}
}
}
接下来运行应用程序
dotnet run -p console-app/console-app.csproj
我们使用项目中的代码创建了一个可运行的应用程序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
}
我们需要更改属性"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"
}
是的,你说得对,我们在再次运行调试之前没有构建正确的项目。解决这个问题的方法是运行
dotnet build
在终端或中,修复此任务并使其指向我们的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