搜尋
首頁開發工具VSCodevscode怎麼寫和調試.net項目

vscode怎麼寫和調試.net項目

Dec 16, 2019 am 11:25 AM
.netvscode編寫偵錯專案

vscode怎麼寫和調試.net項目

安裝外掛程式

使用VSCode編寫dotnet core專案除了其預設的功能外,我推薦還要安裝一些非常有特色,並且有用的擴展,正是因為VSCode的插件機制,才讓它變得更強大,滿足我們各式各樣的需求。

1、C#語言擴充

這個是使用VSCode編寫C#程式碼必須的,安裝之後在預設開啟.cs檔案時還會自動下載偵錯器等。

2、[C# XML註釋]

這個外掛可以快速的幫你加入註釋,選擇安裝吧。

3、[C# Extensions]

這個插件,強烈推薦,可以幫你在建立檔案的時候初始化檔案內容包括對應的命名空間等。

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

新建多項目解決方案

開啟命令列工具,在命令列工具中輸入:

$:> dotnet new sln -o vscode_tutorial //在当前目录下 创建名为vscode_tutorial

以上命令使用dotnet sdk ,新建一個解決方案文件,你可以不用命令列手動創建,但是使用dotnet new 可以更方便的創建dotnet core相關的項目,如下圖所示:

vscode怎麼寫和調試.net項目

建完解決方案我們要來建立項目了,包括一個控制台項目,一個類別庫項目和一個單元測試項目。

先建立一個公開的類別庫專案來存放我們的業務方法(假設我們在做一個真實的專案)(注意,這時已經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來開啟目前目錄來看看完成的專案結構吧,如下圖所示:

vscode怎麼寫和調試.net項目

新增項目間的依賴關係

使用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:

vscode怎麼寫和調試.net項目

開始寫程式碼

這個專案的整體需求:我需要開啟一個控制台程序,運行時需要使用者輸入一個小於50的整數,控制台接收到這個數字後計算出這個數字的階乘,並把結果輸出到控制台上。

經過簡單的思考,我決定把階乘的實作放到Common專案中,並且對其進行單元測試,測試的程式碼則放到UnitTest專案中

vscode怎麼寫和調試.net項目

首先我們把之前產生的專案中不需要的檔案給刪除掉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);
        }
    }
}

使用命令列運行單元測試

在使用設定VSCode之前我還是建議大家先使用命令列來執行單元測試,這有利於更好的理解配置內容。

在根目錄下輸入指令:dotnet test ./VSCodeTutorial.UnitTest/VSCodeTutorial.UnitTest.csproj 檢視執行結果:

vscode怎麼寫和調試.net項目

#

很差劲会出现编码错误,而且这个错误暂时还没有办法解决..但是我猜单元测试通过了,这个问题相信在后续的版本中肯定会得到解决,事实上在Console项目中是可以解决输出乱码问题的。不过可喜的是在VSCode中运行单元测试是没有乱码的问题的。

使用VSCode 运行单元测试

首先当你打开项目的时候,VSCode 可能已经建议你配置一下相关的内容,如下图所示:

vscode怎麼寫和調試.net項目

选择Yes, 会帮你新建这个一个目录和两个文件,luanch.json是用来执行调试程序的配置,而tasks.json则是配置各种任务的,其中运行单元测试就是一种任务。

vscode怎麼寫和調試.net項目

首先我们打开tasks.json ,默认已经添加好了一个任务,如下所示:

{    
"version": "0.1.0",    
"command": "dotnet", //全局命令,即所有的任务都使用这个命令,也可以在各个任务中设置    
"isShellCommand": true,    
"args": [],    
"tasks": [        
{            
"taskName": "build", //任务名称 当设置了主的command 之后这个taskName也会作为一个命令参数            
"args": [                
"${workspaceRoot}\\VSCodeTutorial.ConsoleApp\\VSCodeTutorial.ConsoleApp.csproj"
            ],            
"isBuildCommand": true, 
//一个解决方案只能设置一个编译任务,多设置了也是白搭,当然也能执行,只是不能利用快捷方式运行了           
"problemMatcher": "$msCompile"//C#项目的problemMatcher        
}    
]}

默认使用了全局命令行,这样可以在任务中省去配置dotnet命令,但是如果你的解决方案中包括多个项目需要不同的命令行编译方式,如果前端网站使用grunt打包资源,那么顶部应该留空,而在各个子任务中配置command。

还有如果存在多个编译项目时(如客户端和服务端在一个解决方案时),也应该把command配置在子任务中,并设置个性化的taskName以便区别,所以我推荐把command设置在任务中,下面我们修改一下以上代码,并添加一个运行单元测试的人。

{    
"version": "0.1.0",    
"isShellCommand": true,    
"args": [],    
"tasks": [        
{           
"taskName": "build_console",            
"command":"dotnet"
            "args": [                
"build", //组成dotnet build                
//设置需要编译的项目,如果存在多个启动项目可以设置成解决方案文件(.sln),这里只有一个项目所以设置运行项目也可以                
"${workspaceRoot}\\VSCodeTutorial.ConsoleApp\\VSCodeTutorial.ConsoleApp.csproj"
            ],            
"isBuildCommand": true, //设置是否编译项目            
"problemMatcher": "$msCompile"
        },        
{            
"taskName": "UnitTest",            
"command":"dotnet",            
"args": [                
"test",//组成dotnet test 命令                
"${workspaceRoot}\\VSCodeTutorial.UnitTest\\VSCodeTutorial.UnitTest.csproj"
            ],            
"isTestCommand": true,//设置为单元测试项目           
"problemMatcher": "$msCompile"
        }    
]}

上面的代码中,我将command命令移到了任务中,并给每个任务起了一个好识别的名字,现在这里一个有2个任务了

第一个任务build_console 运行时 会编译VSCodeTutorial.ConsoleApp项目及其依赖的项目

第二个任务UnitTest则是单元测试项目,运行dotnet test命令,这里有个特殊的设置就是"isTestCommand": true 标识为测试项目后可以通过快捷方式运行该命令

任务建好了,我们来运行任务把,windows按下 ctrl+shift+p,在弹出的对话框中输入:task 过滤命令可以得到以下的选项

vscode怎麼寫和調試.net項目

选择任务:运行测试任务 这条来运行我们之前编写好的单元测试项目,可以看到运行成功的情况,如下图所示:

vscode怎麼寫和調試.net項目

这里中文显示正常,没有乱码哦,但是我不知道是什么原因..就是这么神奇

对于经常执行的任务,可以通过设置键盘快捷方式来方便调用,可以看到我分别设置了ctrl+shift+t 运行测试任务ctrl+shift+b 运行编译任务,ctrl+shift+r 启动选择任务,大家可以根据自己的喜好来设置。

开始编写控制台代码

打开VSCodeTutorial.ConsoleApp项目中的Program.cs文件,修改其中的代码,如下所示:

using System;
using VSCodeTutorial.Common;
namespace VSCodeTutorial.ConsoleApp{    
class Program
    {        
static void Main(string[] args)        {            
while(true)
            {
                Console.WriteLine("请输入一个小于10的数字,回车结束:");                
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("你输入的数字是{0},它的阶乘结果是{1},退出请按ctrl+c,按其他键再试一次",
input_int,result);
                       Console.ReadKey();
                    }
                }                else{
                    Console.WriteLine("输入的字符不是有效的数字");
                }
            }

        }
    }
}

代码比较 简单,就不做解释了,我们直接来看运行的结果,这里顺便提一下啊,在我们之前做的众多工作之后,我们这里编写代码有美美哒的智能提示哦,如下图所示:

vscode怎麼寫和調試.net項目

好,再根目录下输入以下命令运行ConsoleApp

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

也可以在VSCodeTutorial.ConsoleApp 目录下直接运行dotnet run 命令即可.

结果运行还是乱码中,但是这次我们有办法解决,我们在控制台代码中添加一句代码即可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; // 设置控制台编码
            while(true)
            {
                Console.WriteLine("请输入一个小于10的数字,回车结束:");                
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("你输入的数字是{0},它的阶乘结果是{1},退出请按ctrl+c,按其他键再试一次",input_int,result);
                       Console.ReadKey();
                    }
                }                else{
                    Console.WriteLine("输入的字符不是有效的数字");
                }
            }

        }
    }
}

使用dotnet build编译后,再次运行Console项目看到了我们期望的界面

vscode怎麼寫和調試.net項目

程序运行正确,当然了,我们都跑过单元测试了不是。。

开始调试程序

如下图提示操作:

vscode怎麼寫和調試.net項目

终于轮到我们之前生成的launch.json文件出场了,先来看下它的代码,代码中已经添加了配置的说明

{    
"version": "0.2.0",    
"configurations": [        
{            
"name": ".NET Core Launch (console)", //配置名称 可以改成更好识别的名字            
"type": "coreclr", // .net core类型的调试            
"request": "launch", //调试方式 不用改            
"preLaunchTask": "build", // 前置任务,这里是编译,但是默认的编译任务,已经被我改了名字了,所以这里要改一下哦            "program": "${workspaceRoot}\\VSCodeTutorial.ConsoleApp\\bin\\Debug\\netcoreapp1.1\\VSCodeTutorial.ConsoleApp.dll", //需要调试的DLL的位置 
"args": [], //额外的参数            
"cwd": "${workspaceRoot}\\VSCodeTutorial.ConsoleApp", //工作目录            
"console": "internalConsole", //控制台模式,这里是内嵌控制台,一会要改成外置的,不然没法交互输入            
"stopAtEntry": false,            
"internalConsoleOptions": "openOnSessionStart"
        },        
{            
"name": ".NET Core Attach", //名称            
"type": "coreclr", //类型            
"request": "attach", //使用附加的方式            
"processId": "${command:pickProcess}" //附加的进程ID        
}    
]}

根据实际情况,需要对上面的配置进行以下变更,变更的部分已经添加了注释,附加调试不是本文的重点,就不改了

{    
"version": "0.2.0",    
"configurations": [
        {            
        "name": "调试ConsoleApp", //修改下命令            
        "type": "coreclr",            
        "request": "launch",            
        "preLaunchTask": "build_console", //修改前置任务名和task.json中配置一致            
        "program": "${workspaceRoot}\\VSCodeTutorial.ConsoleApp\\bin\\Debug\\netcoreapp1.1\\
        VSCodeTutorial.ConsoleApp.dll",            
        "args": [],            
        "cwd": "${workspaceRoot}\\VSCodeTutorial.ConsoleApp",            
        "externalConsole":true, //使用外置的控制台            
        "stopAtEntry": false,            
        "internalConsoleOptions": "openOnSessionStart"
        },
        {            
        "name": ".NET Core Attach",            
        "type": "coreclr",            
        "request": "attach",            
        "processId": "${command:pickProcess}"
        }
    ]
}

修改完成后,我们点击运行按钮可以开始调试了,调试的方式和使用VS是一致的,快捷键为F5 F10 F11

vscode怎麼寫和調試.net項目

完成!

相关文章教程推荐:vscode教程

以上是vscode怎麼寫和調試.net項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Visual Studio專業和企業:付費版本和功能Visual Studio專業和企業:付費版本和功能May 10, 2025 am 12:20 AM

VisualStudioProfessional和Enterprise的區別在於功能和目標用戶群體。 Professional版適合專業開發者,提供代碼分析等功能;Enterprise版面向大型團隊,增加了測試管理等高級工具。

在Visual Studio和VS代碼之間進行選擇:適合您的合適工具在Visual Studio和VS代碼之間進行選擇:適合您的合適工具May 09, 2025 am 12:21 AM

VisualStudio適合大型項目,VSCode適用於各種規模的項目。 1.VisualStudio提供全面的IDE功能,支持多種語言,集成調試和測試工具。 2.VSCode是輕量級編輯器,通過擴展支持多種語言,界面簡潔,啟動快。

Visual Studio:開發人員的強大工具Visual Studio:開發人員的強大工具May 08, 2025 am 12:19 AM

VisualStudio是微軟開發的強大IDE,支持多種編程語言和平台。它的核心優勢包括:1.智能代碼提示和調試功能,2.集成開發、調試、測試和版本控制,3.可通過插件擴展功能,4.提供性能優化和最佳實踐工具,幫助開發者提高效率和代碼質量。

Visual Studio與代碼:定價,許可和可用性Visual Studio與代碼:定價,許可和可用性May 07, 2025 am 12:11 AM

VisualStudio和VSCode在定價、許可和可用性上的差異如下:1.定價:VSCode完全免費,而VisualStudio提供免費社區版和付費企業版。 2.許可:VSCode採用靈活的MIT許可證,VisualStudio的許可根據版本不同而有所不同。 3.可用性:VSCode跨平台支持,而VisualStudio在Windows上表現最佳。

視覺工作室:從代碼到生產視覺工作室:從代碼到生產May 06, 2025 am 12:10 AM

VisualStudio支持從代碼編寫到生產部署的全流程。 1)代碼編寫:提供智能代碼補全和重構功能。 2)調試與測試:集成強大調試工具和單元測試框架。 3)版本控制:與Git無縫集成,簡化代碼管理。 4)部署與發布:支持多種部署選項,簡化應用發布過程。

Visual Studio:查看許可景觀Visual Studio:查看許可景觀May 05, 2025 am 12:17 AM

VisualStudio提供了三種許可證類型:社區版、專業版和企業版。社區版免費,適合個人開發者和小型團隊;專業版按年訂閱,適用於需要更多功能的專業開發者;企業版價格最高,適用於大型團隊和企業。選擇許可證時需考慮項目規模、預算和團隊協作需求。

終極攤牌:Visual Studio與代碼終極攤牌:Visual Studio與代碼May 04, 2025 am 12:01 AM

VisualStudio适合大型项目开发,而VSCode适用于各种规模的项目。1.VisualStudio提供全面的开发工具,如集成调试器、版本控制和测试工具。2.VSCode以其扩展性、跨平台和快速启动著称,适合快速编辑和小型项目开发。

Visual Studio與代碼:比較兩個IDEVisual Studio與代碼:比較兩個IDEMay 03, 2025 am 12:04 AM

VisualStudio適合大型項目和Windows開發,而VSCode適用於跨平台和小型項目。 1.VisualStudio提供全功能的IDE,支持.NET框架和強大調試工具。 2.VSCode則是輕量級編輯器,強調靈活性和擴展性,適用於各種開發場景。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器