久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      安裝插件

      使用VSCode編寫dotnet core項(xiàng)目除了其 默認(rèn)的功能外,我推薦還要安裝一些非常有特色,并且有用的擴(kuò)展,正是因?yàn)閂SCode的插件機(jī)制,才讓它變得更加強(qiáng)大,滿足我們各式各樣的需求。

      1、C#語(yǔ)言擴(kuò)展

      這個(gè)是使用VSCode編寫C#代碼必須的,安裝之后在默認(rèn)打開.cs文件時(shí)還會(huì)自動(dòng)下載調(diào)試器等。

      2、[C# XML注釋]

      這個(gè)插件可以快速的幫你添加注釋,選擇安裝吧。

      3、[C# Extensions]

      這個(gè)插件,強(qiáng)烈推薦,可以幫你在建立文件的時(shí)候初始化文件內(nèi)容包括對(duì)應(yīng)的命名空間等。

      還有一些其他輔助類的,比如EditorConfig,Guildes,One Dark Theme,Project Manager ,Setting Sync等。

      新建多項(xiàng)目解決方案

      打開命令行工具,在命令行工具中輸入:

      $:> dotnet new sln -o vscode_tutorial //在當(dāng)前目錄下 創(chuàng)建名為vscode_tutorial

      以上命令使用dotnet sdk,新建一個(gè)解決方案文件,你可以不用命令行手動(dòng)創(chuàng)建,但是使用dotnet new 可以更加方便的創(chuàng)建dotnet core相關(guān)的項(xiàng)目,如下圖所示:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      建完解決方案我們要來(lái)建立項(xiàng)目了,包括一個(gè)控制臺(tái)項(xiàng)目,一個(gè)類庫(kù)項(xiàng)目和一個(gè)單元測(cè)試項(xiàng)目。

      首先建立一個(gè)公共的類庫(kù)項(xiàng)目用于存放我們的業(yè)務(wù)方法(假設(shè)我們?cè)谧鲆粋€(gè)真實(shí)的項(xiàng)目)(注意,這時(shí)已經(jīng)cd進(jìn)sln目錄里了)

      $:> dotnet new classlib -o VSCodeTutorial.Common //在當(dāng)前目錄下新建類庫(kù)項(xiàng)目VSCodeTutorial.Common $:> dotnet sln add VSCodeTutorial.Common/VSCodeTutorial.Common.csproj //將項(xiàng)目添加到解決方案中

      通過(guò)同樣的方式,我們建立好控制臺(tái)項(xiàng)目和單元測(cè)試項(xiàng)目

      $:> 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,而單元測(cè)試我們使用xunit。

      這個(gè)時(shí)候我們的項(xiàng)目結(jié)構(gòu)已經(jīng)建立完成了,我們用VsCode來(lái)打開當(dāng)前目錄來(lái)看看完成的項(xiàng)目結(jié)構(gòu)吧,如下圖所示:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      添加項(xiàng)目間的依賴關(guān)系

      使用VsCode打開項(xiàng)目文件VSCodeTutorial.ConsoleApp.csproj,在其中添加對(duì)Common項(xiàng)目的引用

      <Project Sdk="Microsoft.NET.Sdk">   <PropertyGroup>     <OutputType>Exe</OutputType>     <TargetFramework>netcoreapp1.1</TargetFramework>   </PropertyGroup>  <!--添加項(xiàng)目引用-->   <ItemGroup>     <ProjectReference Include="..VSCodeTutorial.CommonVSCodeTutorial.Common.csproj" />   </ItemGroup></Project>

      同樣打開VSCodeTutorial.UnitTest.csproj項(xiàng)目文件,在其中添加對(duì)Common項(xiàng)目的引用

      <Project Sdk="Microsoft.NET.Sdk">   <PropertyGroup>     <TargetFramework>netcoreapp1.1</TargetFramework>   </PropertyGroup><!--nuget 上的類庫(kù)引用-->   <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><!--本地項(xiàng)目引用-->  <ItemGroup>     <ProjectReference Include="..VSCodeTutorial.CommonVSCodeTutorial.Common.csproj" />   </ItemGroup></Project>

      和上面的那個(gè)項(xiàng)目不同,這里有一些額外的依賴,這里可以剛好了解下,如果添加nuget中包的依賴,只需像上面一樣使用PackageReference并填入類庫(kù)名稱和版本號(hào)即可。

      添加完依賴后,我們?cè)诟夸浵率褂胐otnet restore來(lái)初始化一下,也可以再用dotnet build命令來(lái)嘗試編譯一下。

      項(xiàng)目依賴關(guān)系如圖2:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      開始編寫代碼

      這個(gè)項(xiàng)目的整體需求:我需要打開一個(gè)控制臺(tái)程序,運(yùn)行時(shí)需要用戶輸入一個(gè)小于50的整數(shù),控制臺(tái)接收到這個(gè)數(shù)字后計(jì)算出這個(gè)數(shù)字的階乘,并把結(jié)果輸出到控制臺(tái)上。

      經(jīng)過(guò)簡(jiǎn)單的思考,我決定把階乘的實(shí)現(xiàn)放到Common項(xiàng)目中,并且對(duì)其進(jìn)行單元測(cè)試,測(cè)試的代碼則放到UnitTest項(xiàng)目中

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      首先我們把之前生成的項(xiàng)目中不需要的文件給刪除掉VsCodeTutorial.Common中的Class1.cs和VSCodeTutorial.UnitTest中的UnitTest1.cs ,當(dāng)然你也可以留著。

      第一步,我們?cè)赩sCodeTutorial.Common項(xiàng)目中新建文件MathHelper.cs并在文件中添加如下代碼,實(shí)現(xiàn)我們的階乘,代碼比較簡(jiǎn)單就不詳述了。

      namespace VSCodeTutorial.Common{     public class MathHelper     {        /// <summary>         /// 階乘,本例中暫不考慮 溢出的問題哦 Factorial(n) = n*(n-1)*(n-2)...*1;         /// </summary>         /// <param name="n">輸入?yún)?shù)n</param>         /// <returns></returns>         public static int Factorial(int n){            if(n <=0 ){                 throw new System.ArgumentOutOfRangeException("n","參數(shù)錯(cuò)誤,不能小于等于零");             }            if(n == 1){                return 1;             }            return n*Factorial(n-1);         }     } }

      第二步,我們要來(lái)測(cè)試這個(gè)代碼,看看是否達(dá)到了我們的目標(biāo),在VSCodeTutorial.UnitTest項(xiàng)目中新建文件MathHelpTest.cs向文件中添加測(cè)試Factorial函數(shù)的方法,如下所示:

      using System; using VSCodeTutorial.Common; using Xunit; namespace VSCodeTutorial.UnitTest{     public class MathHelperTest     {          [Fact]         public void TestFactorial()        {            //先測(cè)試一下邊界的情況             int zero = 0 ;             var exception = Assert.Throws<ArgumentOutOfRangeException>(() => MathHelper.Factorial(zero));             int one = 1;             var oneResult = MathHelper.Factorial(one);             Assert.Equal(1, oneResult);            //再測(cè)一下正常的情況             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);         }     } }

      使用命令行運(yùn)行單元測(cè)試

      在使用配置VSCode之前 我還是建議大家先使用命令行來(lái)運(yùn)行一下單元測(cè)試,這有利于更好的理解配置內(nèi)容。

      在根目錄下輸入命令:dotnet test ./VSCodeTutorial.UnitTest/VSCodeTutorial.UnitTest.csproj 查看運(yùn)行結(jié)果:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      很差勁會(huì)出現(xiàn)編碼錯(cuò)誤,而且這個(gè)錯(cuò)誤暫時(shí)還沒有辦法解決..但是我猜單元測(cè)試通過(guò)了,這個(gè)問題相信在后續(xù)的版本中肯定會(huì)得到解決,事實(shí)上在Console項(xiàng)目中是可以解決輸出亂碼問題的。不過(guò)可喜的是在VSCode中運(yùn)行單元測(cè)試是沒有亂碼的問題的。

      使用VSCode 運(yùn)行單元測(cè)試

      首先當(dāng)你打開項(xiàng)目的時(shí)候,VSCode 可能已經(jīng)建議你配置一下相關(guān)的內(nèi)容,如下圖所示:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      選擇Yes, 會(huì)幫你新建這個(gè)一個(gè)目錄和兩個(gè)文件,luanch.json是用來(lái)執(zhí)行調(diào)試程序的配置,而tasks.json則是配置各種任務(wù)的,其中運(yùn)行單元測(cè)試就是一種任務(wù)。

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      首先我們打開tasks.json ,默認(rèn)已經(jīng)添加好了一個(gè)任務(wù),如下所示:

      {     "version": "0.1.0",     "command": "dotnet", //全局命令,即所有的任務(wù)都使用這個(gè)命令,也可以在各個(gè)任務(wù)中設(shè)置     "isShellCommand": true,     "args": [],     "tasks": [         {             "taskName": "build", //任務(wù)名稱 當(dāng)設(shè)置了主的command 之后這個(gè)taskName也會(huì)作為一個(gè)命令參數(shù)             "args": [                 "${workspaceRoot}\VSCodeTutorial.ConsoleApp\VSCodeTutorial.ConsoleApp.csproj"             ],             "isBuildCommand": true,  //一個(gè)解決方案只能設(shè)置一個(gè)編譯任務(wù),多設(shè)置了也是白搭,當(dāng)然也能執(zhí)行,只是不能利用快捷方式運(yùn)行了            "problemMatcher": "$msCompile"//C#項(xiàng)目的problemMatcher         }     ]}

      默認(rèn)使用了全局命令行,這樣可以在任務(wù)中省去配置dotnet命令,但是如果你的解決方案中包括多個(gè)項(xiàng)目需要不同的命令行編譯方式,如果前端網(wǎng)站使用grunt打包資源,那么頂部應(yīng)該留空,而在各個(gè)子任務(wù)中配置command。

      還有如果存在多個(gè)編譯項(xiàng)目時(shí)(如客戶端和服務(wù)端在一個(gè)解決方案時(shí)),也應(yīng)該把command配置在子任務(wù)中,并設(shè)置個(gè)性化的taskName以便區(qū)別,所以我推薦把command設(shè)置在任務(wù)中,下面我們修改一下以上代碼,并添加一個(gè)運(yùn)行單元測(cè)試的人。

      {     "version": "0.1.0",     "isShellCommand": true,     "args": [],     "tasks": [         {            "taskName": "build_console",             "command":"dotnet"             "args": [                 "build", //組成dotnet build                 //設(shè)置需要編譯的項(xiàng)目,如果存在多個(gè)啟動(dòng)項(xiàng)目可以設(shè)置成解決方案文件(.sln),這里只有一個(gè)項(xiàng)目所以設(shè)置運(yùn)行項(xiàng)目也可以                 "${workspaceRoot}\VSCodeTutorial.ConsoleApp\VSCodeTutorial.ConsoleApp.csproj"             ],             "isBuildCommand": true, //設(shè)置是否編譯項(xiàng)目             "problemMatcher": "$msCompile"         },         {             "taskName": "UnitTest",             "command":"dotnet",             "args": [                 "test",//組成dotnet test 命令                 "${workspaceRoot}\VSCodeTutorial.UnitTest\VSCodeTutorial.UnitTest.csproj"             ],             "isTestCommand": true,//設(shè)置為單元測(cè)試項(xiàng)目            "problemMatcher": "$msCompile"         }     ]}

      上面的代碼中,我將command命令移到了任務(wù)中,并給每個(gè)任務(wù)起了一個(gè)好識(shí)別的名字,現(xiàn)在這里一個(gè)有2個(gè)任務(wù)了

      第一個(gè)任務(wù)build_console 運(yùn)行時(shí) 會(huì)編譯VSCodeTutorial.ConsoleApp項(xiàng)目及其依賴的項(xiàng)目

      第二個(gè)任務(wù)UnitTest則是單元測(cè)試項(xiàng)目,運(yùn)行dotnet test命令,這里有個(gè)特殊的設(shè)置就是"isTestCommand": true 標(biāo)識(shí)為測(cè)試項(xiàng)目后可以通過(guò)快捷方式運(yùn)行該命令

      任務(wù)建好了,我們來(lái)運(yùn)行任務(wù)把,windows按下 ctrl+shift+p,在彈出的對(duì)話框中輸入:task 過(guò)濾命令可以得到以下的選項(xiàng)

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      選擇任務(wù):運(yùn)行測(cè)試任務(wù) 這條來(lái)運(yùn)行我們之前編寫好的單元測(cè)試項(xiàng)目,可以看到運(yùn)行成功的情況,如下圖所示:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      這里中文顯示正常,沒有亂碼哦,但是我不知道是什么原因..就是這么神奇

      對(duì)于經(jīng)常執(zhí)行的任務(wù),可以通過(guò)設(shè)置鍵盤快捷方式來(lái)方便調(diào)用,可以看到我分別設(shè)置了ctrl+shift+t 運(yùn)行測(cè)試任務(wù)ctrl+shift+b 運(yùn)行編譯任務(wù),ctrl+shift+r 啟動(dòng)選擇任務(wù),大家可以根據(jù)自己的喜好來(lái)設(shè)置。

      開始編寫控制臺(tái)代碼

      打開VSCodeTutorial.ConsoleApp項(xiàng)目中的Program.cs文件,修改其中的代碼,如下所示:

      using System; using VSCodeTutorial.Common; namespace VSCodeTutorial.ConsoleApp{     class Program     {         static void Main(string[] args)        {             while(true)             {                 Console.WriteLine("請(qǐng)輸入一個(gè)小于10的數(shù)字,回車結(jié)束:");                 string input_str = Console.ReadLine();                 if(int.TryParse(input_str ,out var input_int))                 {                     if(input_int>0 && input_int<=10){                        int result =  MathHelper.Factorial(input_int);                        Console.WriteLine("你輸入的數(shù)字是{0},它的階乘結(jié)果是{1},退出請(qǐng)按ctrl+c,按其他鍵再試一次", input_int,result);                        Console.ReadKey();                     }                 }                else{                     Console.WriteLine("輸入的字符不是有效的數(shù)字");                 }             }          }     } }

      代碼比較 簡(jiǎn)單,就不做解釋了,我們直接來(lái)看運(yùn)行的結(jié)果,這里順便提一下啊,在我們之前做的眾多工作之后,我們這里編寫代碼有美美噠的智能提示哦,如下圖所示:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      好,再根目錄下輸入以下命令運(yùn)行ConsoleApp

      $:> dotnet run -p ./VSCodeTutorial.ConsoleApp/VSCodeTutorial.ConsoleApp.csproj

      也可以在VSCodeTutorial.ConsoleApp 目錄下直接運(yùn)行dotnet run 命令即可.

      結(jié)果運(yùn)行還是亂碼中,但是這次我們有辦法解決,我們?cè)诳刂婆_(tái)代碼中添加一句代碼即可onsole.OutputEncoding = Encoding.UTF8

      using System; using System.Text; using VSCodeTutorial.Common;namespace VSCodeTutorial.ConsoleApp{     class Program     {         static void Main(string[] args)        {             Console.OutputEncoding = Encoding.UTF8; // 設(shè)置控制臺(tái)編碼             while(true)             {                 Console.WriteLine("請(qǐng)輸入一個(gè)小于10的數(shù)字,回車結(jié)束:");                 string input_str = Console.ReadLine();                 if(int.TryParse(input_str ,out var input_int))                 {                     if(input_int>0 && input_int<=10){                        int result =  MathHelper.Factorial(input_int); Console.WriteLine("你輸入的數(shù)字是{0},它的階乘結(jié)果是{1},退出請(qǐng)按ctrl+c,按其他鍵再試一次",input_int,result);                        Console.ReadKey();                     }                 }                else{                     Console.WriteLine("輸入的字符不是有效的數(shù)字");                 }             }          }     } }

      使用dotnet build編譯后,再次運(yùn)行Console項(xiàng)目看到了我們期望的界面

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      程序運(yùn)行正確,當(dāng)然了,我們都跑過(guò)單元測(cè)試了不是。。

      開始調(diào)試程序

      如下圖提示操作:

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      終于輪到我們之前生成的launch.json文件出場(chǎng)了,先來(lái)看下它的代碼,代碼中已經(jīng)添加了配置的說(shuō)明

      {     "version": "0.2.0",     "configurations": [         {             "name": ".NET Core Launch (console)", //配置名稱 可以改成更好識(shí)別的名字             "type": "coreclr", // .net core類型的調(diào)試             "request": "launch", //調(diào)試方式 不用改             "preLaunchTask": "build", // 前置任務(wù),這里是編譯,但是默認(rèn)的編譯任務(wù),已經(jīng)被我改了名字了,所以這里要改一下哦            "program": "${workspaceRoot}\VSCodeTutorial.ConsoleApp\bin\Debug\netcoreapp1.1\VSCodeTutorial.ConsoleApp.dll", //需要調(diào)試的DLL的位置  "args": [], //額外的參數(shù)             "cwd": "${workspaceRoot}\VSCodeTutorial.ConsoleApp", //工作目錄             "console": "internalConsole", //控制臺(tái)模式,這里是內(nèi)嵌控制臺(tái),一會(huì)要改成外置的,不然沒法交互輸入             "stopAtEntry": false,             "internalConsoleOptions": "openOnSessionStart"         },         {             "name": ".NET Core Attach", //名稱             "type": "coreclr", //類型             "request": "attach", //使用附加的方式             "processId": "${command:pickProcess}" //附加的進(jìn)程ID         }     ]}

      根據(jù)實(shí)際情況,需要對(duì)上面的配置進(jìn)行以下變更,變更的部分已經(jīng)添加了注釋,附加調(diào)試不是本文的重點(diǎn),就不改了

      {     "version": "0.2.0",     "configurations": [         {                     "name": "調(diào)試ConsoleApp", //修改下命令                     "type": "coreclr",                     "request": "launch",                     "preLaunchTask": "build_console", //修改前置任務(wù)名和task.json中配置一致                     "program": "${workspaceRoot}\VSCodeTutorial.ConsoleApp\bin\Debug\netcoreapp1.1\         VSCodeTutorial.ConsoleApp.dll",                     "args": [],                     "cwd": "${workspaceRoot}\VSCodeTutorial.ConsoleApp",                     "externalConsole":true, //使用外置的控制臺(tái)                     "stopAtEntry": false,                     "internalConsoleOptions": "openOnSessionStart"         },         {                     "name": ".NET Core Attach",                     "type": "coreclr",                     "request": "attach",                     "processId": "${command:pickProcess}"         }     ] }

      修改完成后,我們點(diǎn)擊運(yùn)行按鈕可以開始調(diào)試了,調(diào)試的方式和使用VS是一致的,快捷鍵為F5 F10 F11

      vscode怎么編寫和調(diào)試.net項(xiàng)目

      完成!

      相關(guān)文章教程推薦:vscode教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)