使用VSCode開發(fā)和調(diào)試.NET Core程序的方法
電腦不想裝幾十個(gè)G的 VS2017,那就用 VS Code 吧
目標(biāo):
- 創(chuàng)建一個(gè)類庫(kù)項(xiàng)目 Skany.Core,并用 Nuget 引用第三方組件 Hash 實(shí)現(xiàn)加密算法
- 創(chuàng)建一個(gè)單元測(cè)試項(xiàng)目 Skany.Tests,引用類庫(kù) Skany.Core,并測(cè)試其中的方法
- 創(chuàng)建一個(gè)控制臺(tái)應(yīng)用程序項(xiàng)目 Skany.Output,引用類庫(kù) Skany.Core,并輸出方法執(zhí)行結(jié)果
- 創(chuàng)建一個(gè)解決方案 Skany.sln,包括以上三項(xiàng)目
環(huán)境
- .NET Core SDK 2.2.202
開始
首先在 VS Code 安裝幾個(gè)擴(kuò)展插件
- C#
- C# Extensions
- .NET Core Test Explorer
這三個(gè)插件就可以做最基礎(chǔ)的開發(fā)了
構(gòu)建項(xiàng)目
創(chuàng)建解決方案文件夾 C:\Here\Skany
在 VS Code 中打開這個(gè)文件夾
在 VS Code 中打開終端(也可以在外部使用cmd或powershell)
接下來(lái)將使用 .NET Core CLI 命令創(chuàng)建項(xiàng)目
# 創(chuàng)建類庫(kù)項(xiàng)目 dotnet new classlib -n Skany.Core # 創(chuàng)建控制臺(tái)應(yīng)用程序 dotnet new console -n Skany.Output # 創(chuàng)建xUnit單元測(cè)試項(xiàng)目 dotnet new xunit -n Skany.Tests # 為 Output 添加 Core 引用(因?yàn)楫?dāng)前在解決方案目錄,而不是項(xiàng)目目錄,所以add后要加上項(xiàng)目名,以下同理) dotnet add Skany.Output reference Skany.Core # 為 Tests 添加 Core 引用 dotnet add Skany.Tests reference Skany.Core # 為 Core 項(xiàng)目添加 Nuget 引用 dotnet add Skany.Core package Hash --version 4.0.0 # 創(chuàng)建解決方案 sln dotnet new sln -n Skany # 添加項(xiàng)目到解決方案 dotnet sln Skany.sln add Skany.Core dotnet sln Skany.sln add Skany.Output dotnet sln Skany.sln add Skany.Tests # 編譯一下 Output 和 Tests 項(xiàng)目 dotnet build Skany.Output dotnet build Skany.Tests
當(dāng)不熟悉命令時(shí),都可以通過 -h 或 --help 參數(shù)獲取幫助,比如我不知道單元測(cè)試項(xiàng)目的參數(shù),就輸入 dotnet new -h 查看 new 的選項(xiàng)
注:其實(shí)用第三方插件(比如 vscode-solution-explorer)輕松實(shí)現(xiàn)以上命令的可視化操作,這里只是演示 .NET Core CLI 命令用法
創(chuàng)建完后的項(xiàng)目結(jié)構(gòu)
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 項(xiàng)目中的 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: 50, saltLength: 10); 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 項(xiàng)目中別寫測(cè)試案例,將 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)); } } }
單元測(cè)試
通過命令執(zhí)行單元測(cè)試
dotnet test Skany.Tests
如果只想測(cè)試其中一個(gè)方法 HashPasswordTest
dotnet test Skany.Tests --filter HashPasswordTest
當(dāng)然有可視化的測(cè)試插件,誰(shuí)還用命令啊
控制臺(tái)應(yīng)用程序
在 Output 項(xiàng)目調(diào)用 Core.CryptHelper 輸出結(jié)果,代碼如下
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(); }
運(yùn)行 Output 項(xiàng)目
dotnet run --project Skany.Output
斷點(diǎn)調(diào)試
在 Output/Program.cs 中第13行設(shè)置一個(gè)端點(diǎn)(鼠標(biāo)在行首點(diǎn)一下即可,再點(diǎn)一下移除斷點(diǎn))
DEBUG面板配置選擇 .NET Core Launch (console),點(diǎn)擊綠色的開始調(diào)試按鈕,啟動(dòng)調(diào)試
與 VS 中一樣,可以通過 F5/F10/F11 控制調(diào)試流程,也可以添加 Watch 變量,鼠標(biāo)也可以感知變量值
如果開始測(cè)試后,警告提示啟動(dòng)程序找不到,可以按提示(也可以點(diǎn)擊界面齒輪按鈕)修改配置文件 .vscode/launch.json
核對(duì) program 節(jié)點(diǎn)路徑是否正確
發(fā)布
VS 中用工具發(fā)布,發(fā)布參數(shù)配置在 *Profile.pubxml,但 VS Code 中只能用命令
# 發(fā)布Release配置,包括 .net core 運(yùn)行時(shí),分別發(fā)布到 linux 和 windows dotnet publish -c Release --self-contained -r linux-x64 dotnet publish -c Release --self-contained -r win-x64 # 發(fā)布Release配置,包括 .net core 運(yùn)行時(shí),指定目標(biāo)框架 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 # 發(fā)布Release配置,不包括 .net core 運(yùn)行時(shí) dotnet publish -c Release --self-contained false -r linux-x64 dotnet publish -c Release --self-contained false -r win-x64 # 發(fā)布Release配置,不包括 .net core 運(yùn)行時(shí),指定輸出目錄 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 無(wú)比強(qiáng)大,VS Code 小清醒,但是 VS Code 靈活擴(kuò)展性強(qiáng),用來(lái)開發(fā)前端或 .NET Core 項(xiàng)目,也是得心應(yīng)手
到此這篇關(guān)于使用VSCode開發(fā)和調(diào)試.NET Core程序的方法的文章就介紹到這了,更多相關(guān)VSCode開發(fā)和調(diào)試.NET Core內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)支持?jǐn)帱c(diǎn)續(xù)傳多線程下載客戶端工具類
C#實(shí)現(xiàn)支持?jǐn)帱c(diǎn)續(xù)傳多線程下載的 Http Web 客戶端工具類 (C# DIY HttpWebClient),感興趣的朋友可以參考下本文,或許對(duì)你有所幫助2013-04-04Coolite Cool Study 3 MVC + Coolite 的實(shí)現(xiàn)代碼
啊,開始以為MVC+Coolite結(jié)合的例子沒什么難度,但原來(lái)Coolite在MVC中需要特定設(shè)置一下某些屬性才行,費(fèi)了兩個(gè)小時(shí)才算大功告成,具體請(qǐng)看下文。還是先把這個(gè)例子的效果貼上來(lái)再說。2009-05-05此頁(yè)的狀態(tài)信息無(wú)效,可能已損壞 的處理辦法及原因分析
此頁(yè)的狀態(tài)信息無(wú)效,可能已損壞 的處理辦法及原因分析,需要的朋友可以參考一下2013-06-06IIS處理Asp.net請(qǐng)求和Asp.net頁(yè)面生命周期詳細(xì)說明
ASP.NET 頁(yè)運(yùn)行時(shí),此頁(yè)將經(jīng)歷一個(gè)生命周期,在生命周期中將執(zhí)行一系列處理步驟。這些步驟包括初始化、實(shí)例化控件、還原和維護(hù)狀態(tài)、運(yùn)行事件處理程序代碼以及進(jìn)行呈現(xiàn)2012-01-01防止在服務(wù)器處理完成之前用戶多次點(diǎn)擊提交按鈕處理代碼
在提交表單時(shí),如果網(wǎng)頁(yè)速度過慢或者其他原因,用戶多次提交能導(dǎo)致數(shù)據(jù)的修改,怎么解決這個(gè)問題呢,接下來(lái)將為您解決這個(gè)問題,需要的朋友可以了解下2012-12-12淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié)
這篇文章主要介紹了淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié),以便在實(shí)際的開發(fā)中選用合適的控件進(jìn)行數(shù)據(jù)綁定,以提高開發(fā)效率。2016-12-12ASP.NET MVC后臺(tái)參數(shù)驗(yàn)證的幾種方式
本篇文章主要介紹了ASP.NET MVC后臺(tái)參數(shù)驗(yàn)證的幾種方式 ,具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12asp.net 數(shù)據(jù)庫(kù)連接類代碼(SQL)
asp.net數(shù)據(jù)庫(kù)連接類(SQL) 代碼,需要的朋友可以參考下。2010-03-03