电脑不想装几十个G的 VS2017,那就用 VS Code 吧

目标:

  • 创建一个类库项目 Skany.Core,并用 Nuget 引用第三方组件 Hash 实现加密算法
  • 创建一个单元测试项目 Skany.Tests,引用类库 Skany.Core,并测试其中的方法
  • 创建一个控制台应用程序项目 Skany.Output,引用类库 Skany.Core,并输出方法执行结果
  • 创建一个解决方案 Skany.sln,包括以上三项目

环境

  • .NET Core SDK 2.2.202

开始

首先在 VS Code 安装几个扩展插件

C#
C# Extensions
.NET Core Test Explorer

这三个插件就可以做最基础的开发了

构建项目

创建解决方案文件夹 C:\Here\Skany
在 VS Code 中打开这个文件夹
在 VS Code 中打开终端(也可以在外部使用cmd或powershell)
接下来将使用 .NET Core CLI 命令创建项目

# 创建类库项目
dotnet new classlib -n Skany.Core
# 创建控制台应用程序
dotnet new console -n Skany.Output
# 创建xUnit单元测试项目
dotnet new xunit -n Skany.Tests
# 为 Output 添加 Core 引用(因为当前在解决方案目录,而不是项目目录,所以add后要加上项目名,以下同理)
dotnet add Skany.Output reference Skany.Core
# 为 Tests 添加 Core 引用
dotnet add Skany.Tests reference Skany.Core
# 为 Core 项目添加 Nuget 引用
dotnet add Skany.Core package Hash --version 4.0.0
# 创建解决方案 sln
dotnet new sln -n Skany
# 添加项目到解决方案
dotnet sln Skany.sln add Skany.Core
dotnet sln Skany.sln add Skany.Output
dotnet sln Skany.sln add Skany.Tests
# 编译一下 Output 和 Tests 项目
dotnet build Skany.Output
dotnet build Skany.Tests

当不熟悉命令时,都可以通过 -h 或 --help 参数获取帮助,比如我不知道单元测试项目的参数,就输入 dotnet new -h 查看 new 的选项
注:其实用第三方插件(比如 vscode-solution-explorer)轻松实现以上命令的可视化操作,这里只是演示 .NET Core CLI 命令用法

创建完后的项目结构

 SKANY
| Skany.Core
| Class1.cs
| Skany.Core.csproj
| Skany.Output
| Program.cs
| Skany.Output.csproj
| Skany.Tests
| UnitTest1.cs
| Skany.Tests.csproj
| Skany.sln

将 Core 项目中的 Class1.cs 改为 CryptHelper.cs,代码如下

using HashLibrary;

namespace Skany.Core
{
public class CryptHelper
{
public static string HashPassword(string password, out string salt)
{
var hash = HashedPassword.New(password, hashLength: , saltLength: );
salt = hash.Salt;
return hash.Hash;
} public static bool VerifyPassword(string password, string hashPassword, string salt)
{
var hash = new HashedPassword(hashPassword, salt);
bool matches = hash.Check(password);
return matches;
}
}
}

在 Tests 项目中别写测试案例,将 UnitTest1.cs 改为 CryptUnitTest.cs,代码如下

using System;
using Xunit; namespace Skany.Tests
{
using Core; public class CryptUnitTest
{
[Theory]
[InlineData("zhang")]
[InlineData("baidu")]
public void HashPasswordTest(string password)
{
string salt;
var hashPassword = CryptHelper.HashPassword(password, out salt);
Assert.NotNull(hashPassword);
Assert.NotNull(salt);
Assert.True(hashPassword.Length == CryptHelper.HashLength);
Assert.True(salt.Length == CryptHelper.SaltLength);
VerifyPasswordTest(password, hashPassword, salt);
} [Theory]
[InlineData("zhang", "ÁēÕĀ1fv¾ĒëÜĝ}f§¼kÈ$Æ7KĎĞĐMĬZĝČ9ËÅ«¢ÝĪÙØê£İ)¥jµQIįa", "ïÛŀB³äĭonÊ")]
[InlineData("baidu", " g©®Ģ¹Óäõ¥ģH»7ċuO¸%AOĮ©ĩ§8ĆKĄöĉĖß$µåˬüÖ=ĝĴ¶Cꨧh/", "Ā˧į^H7Í_h")]
public void VerifyPasswordTest(string password, string hashPassword, string salt)
{
Assert.True(hashPassword.Length == CryptHelper.HashLength);
Assert.True(salt.Length == CryptHelper.SaltLength);
Assert.True(CryptHelper.VerifyPassword(password, hashPassword, salt));
}
}
}

单元测试

通过命令执行单元测试

dotnet test Skany.Tests

如果只想测试其中一个方法 HashPasswordTest

dotnet test Skany.Tests --filter HashPasswordTest

当然有可视化的测试插件,谁还用命令啊

控制台应用程序

在 Output 项目调用 Core.CryptHelper 输出结果,代码如下

static void Main(string[] args)
{
string salt = null;
var password = "baidu";
var hashPassword = CryptHelper.HashPassword(password, out salt);
Console.WriteLine("Password => {0}", password);
Console.WriteLine("HashPassword => {0}", hashPassword);
Console.WriteLine("Salt => {0}", salt); //=================================== var matchs = CryptHelper.VerifyPassword(password, hashPassword, salt);
Console.WriteLine("Matchs: {0}", matchs);
Console.ReadLine();
}

运行 Output 项目

dotnet run --project Skany.Output

断点调试

在 Output/Program.cs 中第13行设置一个端点(鼠标在行首点一下即可,再点一下移除断点)

DEBUG面板配置选择 .NET Core Launch (console),点击绿色的开始调试按钮,启动调试

与 VS 中一样,可以通过 F5/F10/F11 控制调试流程,也可以添加 Watch 变量,鼠标也可以感知变量值

如果开始测试后,警告提示启动程序找不到,可以按提示(也可以点击界面齿轮按钮)修改配置文件 .vscode/launch.json
核对 program 节点路径是否正确

发布

VS 中用工具发布,发布参数配置在 *Profile.pubxml,但 VS Code 中只能用命令

# 发布Release配置,包括 .net core 运行时,分别发布到 linux 和 windows
dotnet publish -c Release --self-contained -r linux-x64
dotnet publish -c Release --self-contained -r win-x64 # 发布Release配置,包括 .net core 运行时,指定目标框架 netcoreapp2.2
dotnet publish -c Release -f netcoreapp2.2 --self-contained -r linux-x64
dotnet publish -c Release -f netcoreapp2.2 --self-contained -r win-x64 # 发布Release配置,不包括 .net core 运行时
dotnet publish -c Release --self-contained false -r linux-x64
dotnet publish -c Release --self-contained false -r win-x64 # 发布Release配置,不包括 .net core 运行时,指定输出目录
dotnet publish -c Release --self-contained false -r linux-x64 -o C:\Here\Spany\publish\linux-x64
dotnet publish -c Release --self-contained false -r win-x64 -o C:\Here\Spany\publish\win-x64

虽然 VS 无比强大,VS Code 小清醒,但是 VS Code 灵活扩展性强,用来开发前端或 .NET Core 项目,也是得心应手

使用 VS Code 开发和调试 .NET Core 程序的更多相关文章

  1. 使用VS Code 从零开始开发并调试.NET Core 应用程序

    最新文章:http://www.cnblogs.com/linezero/p/VSCodeNETCore.html 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一 ...

  2. 使用VS Code开发ASP.NET 5 应用程序

    本文简要地翻译了 https://code.visualstudio.com/Docs/runtimes/ASPnet5 并结合我的实践做了一些说明. 准备工作 1.安装VS Code  https: ...

  3. 使用Visual Studio Code开发.NET Core看这篇就够了

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9926078.html 在本文中,我将带着大家一步一步的通过图文的形式来演示如何在Visual Studi ...

  4. 【实验手册】使用Visual Studio Code 开发.NET Core应用程序

    .NET Core with Visual Studio Code 目录 概述... 2 先决条件... 2 练习1: 安装和配置.NET Core以及Visual Studio Code 扩展... ...

  5. 使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步

    本文记录了在Windows环境下安装Visual Studio Code开发工具..Net Core 1.0 SDK和开发一个简单的Web-Demo网站的全过程. 一.安装Visual Studio ...

  6. 如何使用 VS Code开发.NET Core应用程序

    Visual Studio Code(VS Code)是Microsoft为Windows,Linux和Mac操作系统开发的免费,跨平台,轻量级的源代码编辑器,它是源代码编辑器,而Visual Stu ...

  7. 使用VS Code开发.Net Core 2.0 MVC Web应用程序教程之一

    好吧,现在我们假设你已经安装好了VS Code开发工具..Net Core 2.0预览版的SDK dotnet-sdk-2.0.0(注意自己的操作系统),并且已经为VS Code安装好了C#扩展(在V ...

  8. VSC调试.NET Core 应用程序

    VS Code 从零开始开发并调试.NET Core 应用程序 使用VS Code 从零开始开发并调试.NET Core 应用程序,C#调试. 上一篇 使用VS Code开发 调试.NET Core ...

  9. 使用VS Code从零开始开发调试.NET Core 1.0

    使用VS Code 从零开始开发调试.NET Core 1.0. .NET Core 是一个开源的.跨平台的 .NET 实现. VS Code 全称是 Visual Studio Code,Visua ...

随机推荐

  1. scrapy 爬取前程无忧

    spider # -*- coding: utf-8 -*- import scrapy from Jobs.items import JobsItem class Job51spiderSpider ...

  2. django添加控件

    function bindRemoveCls() { $('#removeCls').click(function () { var options = $('#sel')[0].selectedOp ...

  3. GUI学习之五——QPushbutton类学习笔记

    QPushButton是QAbstractButton类下使用最多的子类,它的用法在上一章中基本讲完了,这里还总结了几个别的用法. 一.创建按钮 我们在前面所有的案例中创建按钮都是用这样的方式 win ...

  4. dubbo服务达成jar包

    <build> <finalName>dubbo-provider</finalName> <!-- jar包名,一般设置为提供者服务名 --> < ...

  5. pycharm设置文件编码

    原文链接

  6. MyBatis中<if test=" ">标签条件不起作用

    问题产生? 今天在做Excel导出的时候,有个判断一个状态的字段,我的这个字段是int类型的,还有两个时间类型,我在判断的时候给的是Long类型的. 在测试的时候发现,不管怎么样都不执行if条件里面的 ...

  7. ubuntu18.04修改ssh登录欢迎信息

    1.编辑文件 ll /etc/update-motd.d/* 2.修改文件 3.查询效果 run-parts /etc/update-motd.d

  8. 2019.03.28 bzoj3325: [Scoi2013]密码(manacher+模拟)

    传送门 题意: 现在有一个nnn个小写字母组成的字符串sss. 然后给你nnn个数aia_iai​,aia_iai​表示以sis_isi​为中心的最长回文串串长. 再给你n−1n-1n−1个数bib_ ...

  9. deepCopy深拷贝

    function deepCopy(p,c){ var c = c || {}; for ( var i in p ){ //确保属于自己的属性 if ( p.hasOwnProperty( i ) ...

  10. ionic 侧栏菜单用法

    第一步: 引入js和css文件我这里是直接引入的cdn,ionic是基于angular的,bundle.min.js把常用angular的js已经压缩到一起,可以直接引入.bundle.min.js, ...