2023 年我自己职业生涯中有个较大的变化,疫情结束之后,我来到了二线城市,花了好久才找到一份.NET 的工作。 入职面试的时候,面试官跟我提到了公司内.NET 后端的开发工具要转到 vscode 。
开始尝试
开始使用的时候用 c# for vscode,VSCode-solution-explorer,nuget package manager,C# XML Documentation Comments 等插件配合起来开发 dotnet6. 后来微软推出的 c# for vscode + c# dev kit 不断的升级,基本上取代了之前用的那些插件。 visual studio for MAC 上,微软后期也不在继续更新,这就意味着其他平台上.NET 开发工具的主力就会是 vscode 。 开始使用的时候先尝试了直接使用 dotnet cli 的一些基本命令,来管理项目和解决方案。
dotnet new sln -o solution // 新建解决方案 dotnet new list //列出 templates dotnet new console -n conApp // 新建一个控制台程序 dotnet new classlib -n Lib -f net6.0 // 新建类库 dotnet sln add .\Lib\Lib.csproj 加入到解决方案 dotnet nuget
dotnet nuget list source dotnet nuget add source 添加源 dotnet nuget remove source dotnet disable source dotnet enable source 当然我们经常用过命令来管理项目确实有写麻烦。 c# kit dev 给 dotnet 开发者提供了 solution explorer 。
Change Cursor Style and Animation in VS Code
"editor.cursorBlinking": "smooth" Unit test
目前 c# dev kit 还有一些存在的问题待修复。 比如我常用到 xunit 框架用来输出日志的 output ,还无法输出到控制台,无法看到自己打印的信息。 相关 issue. No output recorded after unit testing using xUnit 为了对代码进行测试覆盖,需要安装几个插件 首先代码中需要引入 Coverlet
dotnet add package coverlet.collector xunit 项目中使用
dotnet test --collect:"XPlat Code Coverage" 这个命令可以配置过滤条件排除一些不想被统计的代码参考文档 需要添加一个配置文件 coverlet.runsettings
<?xml version="1.0" encoding="utf-8" ?> <RunSettings> <DataCollectionRunSettings> <DataCollectors> <DataCollector friendlyName="XPlat code coverage"> <Configuration> <Format>json,cobertura,lcov,teamcity,opencover</Format> <Exclude>[coverlet.*.tests?]*,[*]Coverlet.Core*</Exclude> <!-- [Assembly-Filter]Type-Filter --> <Include>[coverlet.*]*,[*]Coverlet.Core*</Include> <!-- [Assembly-Filter]Type-Filter --> <ExcludeByAttribute>Obsolete,GeneratedCodeAttribute,CompilerGeneratedAttribute</ExcludeByAttribute> <ExcludeByFile>**/dir1/class1.cs,**/dir2/*.cs,**/dir3/**/*.cs,</ExcludeByFile> <!-- Globbing filter --> <IncludeDirectory>../dir1/,../dir2/,</IncludeDirectory> <SingleHit>false</SingleHit> <UseSourceLink>true</UseSourceLink> <IncludeTestAssembly>true</IncludeTestAssembly> <SkipAutoProps>true</SkipAutoProps> <DeterministicReport>false</DeterministicReport> <ExcludeAssembliesWithoutSources>MissingAll,MissingAny,None</ExcludeAssembliesWithoutSources> </Configuration> </DataCollector> </DataCollectors> </DataCollectionRunSettings> </RunSettings> https://github.com/coverlet-coverage/coverlet/blob/master/Documentation/VSTestIntegration.md 为了在 vscode 中可以展示对应文件的代码覆盖率,可以使用这个插件 Coverage Gutters https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters 为了生成对那个的代码测试报告可以安装 RepotGenerator
Run multiple dotnet project at once
** tasks.json **
[ { "command": "dotnet", "args": [ "build", "${workspaceFolder}\\xxx.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile", "type": "process", "label": "dotnet: build APIGateway4" } ] ** launch.json **
[{ "name": ".NET8 Launch (APIGateway4)", "type": "coreclr", "request": "launch", "preLaunchTask": "dotnet: build APIGateway4", "program": "${workspaceFolder}\\APIGateway4.exe", "args": [], "cwd": "${workspaceFolder}\\src\\APIGateway\\APIGateway4", "stopAtEntry": false, "serverReadyAction": { "action": "openExternally", "pattern": "\\bNow listening on:\\s+( https?://\\S+)" }, "env": { "ASPNETCORE_ENVIRONMENT": "Development" } }], "compounds": [ { "name": ".NET8 Launch (ALL API Gateway)", "configurations": [ ".NET8 Launch (APIGateway)", ".NET8 Launch (APIGateway2)" ], "stopAll": false } ] Add bracket pair colorization to your settings.json
"editor.guides.bracketPairs": "active", "editor.bracketPairColorization.enabled": true, 集成 cmder
按 Ctrl + , 打开 VS Code setting ,搜索 terminal profiles windows,或者 ctrl + shift +p 打开 vs code Command Pallet 搜索 编辑 settings.json
"terminal.integrated.defaultProfile.windows": "Cmder", "terminal.integrated.profiles.windows": { "Cmder": { "name": "Cmder", "path": [ "${env:windir}\\Sysnative\\cmd.exe", "${env:windir}\\System32\\cmd.exe" ], "args": ["/k", "${env:cmder_root}\\vendor\\bin\\vscode_init.cmd"], "icon": "terminal-cmd", "color": "terminal.ansiGreen" }, }, 需要提前配置一下环境变量 CMDER_ROOT 指向 Cmder 的安装目录
Hot keys
- ctrl + , : 搜索文件或函数或变量 或者 编辑->定位到 注意:, 对应 < 那个按键上的
- c ,c 逗号,而不是"那个键的逗号
- cctrl + g : 定位到行 或者 编辑->转到
- cctrl + - : 返回到上一次光标浏览 注意:- 号不是小键(数字)盘上的那个键
- cctrl + + : 返回到后一次光标浏览 注意:+ 号不是小键(数字)盘上的那个键
- cctrl + c :复制光标所在行 注意:只需要光标在这一行,不需要选中整行
- cctrl + x : 剪切光标所在行 注意:只需将光标移至该行,不需要选中整行
- cctrl + l(注意是 L 键) : 删除光标所在行 注意:只需将光标移至该行,不需要选中整行
- cctrl + k + c :注释所选代码或光标所在行 注意:先按 k,再按 c 或者 ctrl+k,ctrl+c
- cctrl + k + u:取消注释所选代码或光标所在行 注意:先按 k,再按 u 或者 ctrl+k,ctrl+u
- cctrl + f:在本文件中查找
- cctrl + h :在本文件中替换
- cf2: 转到定义 , 如想查找 Connect 函数在哪里定义,可以双击选中,然后 f12
- cshift + f12 : 查找所有引用 。如想查找 Connect 函数在哪些地方调用了,可以选中 Connect ,然后 shift+f12
- cf5 : 开始运行 或者 开始调试
Quick fix 失效了
quick fix 按 ctrl + . 失效了,可以尝试修改成其他的快捷键 shift + ctrl + p 输入 Open Keyboard Shortcuts search quick fix 比如修改成 ctrl + shift + .
体会
总体感觉 vscode ,在微软更新了 c# + c# dev kit 之后,写 dotnet 的代码体验越来越好,给我的感觉是轻量和可定制化,希望 vscode for dotnet 越来越好。 ** 那么你有没有在使用 vscode 来开发 dotnet 呢? 可以与我一起讨论这个话题 **
