VsCode编写和调试.NET Core
使用VsCode编写和调试.NET Core项目
本来我还想介绍以下VSCode或者donet core,但是发现都是废话,没有必要,大家如果对这个不了解可以直接google这两个关键字,或者也根本不会看我这边文章。
好直接进入主题了,本文的前提条件:
- 已经安装好了.NET Core SDK
- 已经安装了VSCode
0x00. 磨刀不误砍柴工
使用VSCode编写dotnet core项目除了其 默认的功能外,我推荐还要安装一些非常有特色,并且有用的扩展,正是因为VSCode的插件机制,才让它变得更加强大,满足我们各式各样的需求
C#语言扩展: https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp
这个是使用VSCode编写C#代码必须的,安装之后在默认打开.cs文件时 还会自动下载调试器等(不过过程可能比较慢,在墙外的原因)
[C# XML注释]: https://marketplace.visualstudio.com/items?itemName=k--kato.docomment
这个可以插件可以快速的帮你添加注释,选择安装吧
[C# Extensions]: https://marketplace.visualstudio.com/items?itemName=jchannon.csharpextensions
这个插件,强烈推荐,可以帮你在建立文件的时候初始化文件内容包括对应的命名空间等
还有一些其他辅助类的,比如EditorConfig,Guildes,One Dark Theme,Project Manager ,Setting Sync等。
0x01. 新建多项目解决方案
打开命令行工具,在命令行工具中输入:
$:> dotnet new sln -o vscode_tutorial //在当前目录下 创建名为vscode_tutorial
以上命令使用dotnet sdk,新建一个解决方案文件,你可以不用命令行手动创建,但是使用dotnet new
可以更加方便的创建dotnet core相关的项目. 顺便提一下使用dotnet new 命令可以新建类库项目,控制台项目,网站项目等等,详细使用可以使用dotnet help new
命令来查看,如下图所示:
建完解决方案我们要来建立项目了,包括一个控制台项目,一个类库项目和一个单元测试项目
首先建立一个公共的类库项目用于存放我们的业务方法(假设我们在做一个真实的项目)(注意,这时已经cd进sln目录里了)
$:> dotnet new classlib -o VSCodeTutorial.Common //在当前目录下新建类库项目VSCodeTutorial.Common
$:> dotnet sln add VSCodeTutorial.Common/VSCodeTutorial.Common.csproj //将项目添加到解决方案中
通过同样的方式,我们建立好控制台项目和单元测试项目
$:> dotnet new console -o VSCodeTutorial.ConsoleApp
$:> dotnet sln add VSCodeTutorial.ConsoleApp/VSCodeTutorial.ConsoleApp.csproj
$:> dotnet new xunit -o VSCodeTutorial.UnitTest
$:> dotnet sln add VSCodeTutorail.UnitTest/VSCodeTutorial.UnitTest.csproj
这里要注意控制的模板名称叫console
而单元测试我们使用xunit
这个时候我们的项目结构已经建立完成了,我们用VsCode来打开当前目录来看看完成的项目结构吧,如下图所示
0x02. 添加项目间的依赖关系
使用VsCode打开项目文件VSCodeTutorial.ConsoleApp.csproj,在其中添加对Common项目的引用
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<!--添加项目引用-->
<ItemGroup>
<ProjectReference Include="..\VSCodeTutorial.Common\VSCodeTutorial.Common.csproj" />
</ItemGroup>
</Project>
同样打开VSCodeTutorial.UnitTest.csproj项目文件,在其中添加对Common项目的引用
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<!--nuget 上的类库引用-->
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
<PackageReference Include="xunit" Version="2.2.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
</ItemGroup>
<!--本地项目引用-->
<ItemGroup>
<ProjectReference Include="..\VSCodeTutorial.Common\VSCodeTutorial.Common.csproj" />
</ItemGroup>
</Project>
和上面的那个项目不同,这里有一些额外的依赖,这里可以刚好了解下,如果添加nuget中包的依赖,只需像上面一样使用PackageReference
并填入类库名称和版本号即可
添加完依赖后,我们在根目录下使用dotnet restore
来初始化以下,也可以再用dotnet build
命令来尝试编译一下先
项目依赖关系如图2:
0x03. 开始编写代码
这个项目的整体需求:我需要打开一个控制台程序,运行时需要用户输入一个小于50的整数,控制台接收到这个数字后计算出这个数字的阶乘,并把结果输出到控制台上。
经过简单的思考,我决定把阶乘的实现放到Common项目中,并且对其进行单元测试,测试的代码则放到UnitTest项目中
首先我们把之前生成的项目中不需要的文件给删除掉VsCodeTutorial.Common中的Class1.cs和VSCodeTutorial.UnitTest中的UnitTest1.cs ,当然你也可以留着。
第一步,我们在VsCodeTutorial.Common
项目中新建文件MathHelper.cs
并在文件中添加如下代码,实现我们的阶乘,代码比较简单就不详述了。
namespace VSCodeTutorial.Common
{
public class MathHelper
{
/// <summary>
/// 阶乘,本例中暂不考虑 溢出的问题哦 Factorial(n) = n*(n-1)*(n-2)...*1;
/// </summary>
/// <param name="n">输入参数n</param>
/// <returns></returns>
public static int Factorial(int n){
if(n <=0 ){
throw new System.ArgumentOutOfRangeException("n","参数错误,不能小于等于零");
}
if(n == 1){
return 1;
}
return n*Factorial(n-1);
}
}
}
第二步,我们要来测试这个代码,看看是否达到了我们的目标,在VSCodeTutorial.UnitTest
项目中新建文件MathHelpTest.cs
向文件中添加测试Factorial
函数的方法,如下所示:
using System;
using VSCodeTutorial.Common;
using Xunit;
namespace VSCodeTutorial.UnitTest
{
public class MathHelperTest
{
[Fact]
public void TestFactorial()
{
//先测试一下边界的情况
int zero = 0 ;
var exception = Assert.Throws<ArgumentOutOfRangeException>(() => MathHelper.Factorial(zero));
int one = 1;
var oneResult = MathHelper.Factorial(one);
Assert.Equal(1, oneResult);
//再测一下正常的情况
int five = 5;
var fiveResult = MathHelper.Factorial(five);
Assert.Equal(5*4*3*2*1, fiveResult);
int ten = 10;
var tenResult = MathHelper.Factorial(ten);
Assert.Equal(10*9*8*7*6*5*4*3*2*1, tenResult);
}
}
}
0x04 使用命令行运行单元测试
在使用配置VSCode之前 我还是建议大家先使用命令行来运行一下单元测试,这有利于更好的理解配置内容。
在根目录下输入命令:dotnet test ./VSCodeTutorial.UnitTest/VSCodeTutorial.UnitTest.csproj
查看运行结果:
很差劲会出现编码错误,而且这个错误暂时还没有办法解决..但是我猜单元测试通过了,这个问题相信在后续的版本中肯定会得到解决,事实上在Console项目中是可以解决输出乱码问题的。不过可喜的是在VSCode中运行单元测试是没有乱码的问题的
VsCode编写和调试.NET Core的更多相关文章
- 使用VsCode编写和调试.NET Core项目
本来我还想介绍以下VSCode或者donet core,但是发现都是废话,没有必要,大家如果对这个不了解可以直接google这两个关键字,或者也根本不会看我这边文章. 好直接进入主题了,本文的 ...
- [原创]在Windows平台使用msys2、mingw64和vscode编写和调试C/C++代码
相关名词就不解释了,这里主要讲讲在vscode里怎么配,这里假设大家相关工具已经装好. 题外话:里面的大多数坑都是windows平台和linux平台的差异造成的,如果在linux平台配置,应该会顺利很 ...
- [原创]在Windows平台使用msvc(cl.exe) + vscode编写和调试C/C++代码
1.在.vscode目录下,新建以下几个配置文件,当然也可以通过vscode命令自动生成,如果你已有这些文件直接修改即可. c_cpp_properties.json(代码提示): { "c ...
- visual studio code 调试 .NET core 1.1.
一 windows端 使用VsCode编写和调试.NET Core项目 1 .新建sln 解决方案 dotnet new sln -o slnname 2. 新建DLL 3.将DLL添加到sln: ...
- vscode 调试.net core 2.0 输出乱码解决方法
之前在vscode上调试.net core 2.0项目时输出窗口一直是乱码,查了很多资料无法解决 最终在github找到了解决办法 -> https://github.com/OmniSha ...
- 使用vscode开发调试.net core应用程序并部署到Linux跨平台
使用VS Code开发 调试.NET Core RC2应用程序,由于.NET Core 目前还处于预览版. 本文使用微软提供的示例进行开发及调试. https://github.com/aspnet/ ...
- 使用VS Code从零开始开发调试.NET Core 1.0
使用VS Code 从零开始开发调试.NET Core 1.0. .NET Core 是一个开源的.跨平台的 .NET 实现. VS Code 全称是 Visual Studio Code,Visua ...
- 使用VS Code开发调试.NET Core 多项目
使用Visual Studio Code(VS Code)开发调试.NET Core和ASP.NET Core 多项目multiple project. 之前讲解过如果使用Visual Studio ...
- 使用VS Code从零开始开发调试.NET Core 1.1
使用VS Code 从零开始开发调试.NET Core 1.1.无需安装VS 2017 RC 即可开发.NET Core 1.1. .NET Core 1.1 发布也有一段时间了,最大的改动是从 pr ...
随机推荐
- Jobs深入学习
代码回顾 Quartz 需要了解你可能希望该作业的实例拥有的各种属性,这是通过JobDetail 类完成的. JobDetail 实例是使用 JobBuilder 类构建的. JobDetail j ...
- list.remove的使用分析
场景描述 在做需求中,有很多情况会出现 对一个list遍历并过滤掉其中特定的数据 这种场景 .但是按照平常的使用方式,发现报错了. public static void main(String[] a ...
- uva-993-贪心
题意:给你一个数字y,生成另外一个最小的数字x,使得x里面的每一位相乘等于y 解题思路:直接贪心就是,x里面的每一位都小于等于9 #include <string> #include< ...
- 子页面调整父亲页面的iframe元素
$('iframe', parent.document).attr('scrolling','no');
- canvas 2.0
了解 虽然大家都称Canvas为html5的新标签,看起来好像Canvas属于html语言的新知识,但其实Canvas画图是通过javascript来做的.所以,如果你想学习Canvas画图,你必须要 ...
- TCC细读 - 2 核心实现
TCC,基于业务层面的事物定义,粒度完全由业务自己控制,本质上还是补偿的思路,它把事物运行过程分为try-confirm-cancel阶段,每个阶段逻辑由业务代码控制 业务活动管理器控制业务活动的一致 ...
- win7频繁提示资源管理器已停止工作解决办法
方法一,重新启动资源管理器,右键点击桌面下方的“任务栏”空白区,在弹出的菜单栏中选择“任务管理器”. 进入任务管理器,点击上方的“文件”,选择新建任务. 在弹出的对话框中,输入explorer ...
- java 8 日期函数
1.Timestamp(long)转成日期 Timestamp timestamp = new Timestamp(System.currentTimeMillis()); LocalDate ...
- nginx_server_location对客户资源的辨别规则
语法:location [ = | ~ | ~* | ^~ ] uri { …一组命令… } http://nginx.org/en/docs/http/ngx_http_core_module.ht ...
- 十一 hashlib模块
# 1.什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的 ...