惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
Last Week in AI
Last Week in AI
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
J
Java Code Geeks
A
About on SuperTechFans
F
Fortinet All Blogs
B
Blog
aimingoo的专栏
aimingoo的专栏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
G
Google Developers Blog
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
博客园_首页
博客园 - 叶小钗
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
D
Docker
云风的 BLOG
云风的 BLOG

.NET

.net framework 项目新样式 数据库迁移报错 知乎网友:“VS2026 还是跑在 .NET Framework 4.8 上,看来 .NET LTS 只有三年的问题还真把微软自己的脖子卡住了” .Net 有没有类似若依这种后台框架? 请教个 .NET Framework 4.0 升级以运行在 arm 上的问题 应届生刚入职,做的是 wms+mes+mes 二次开发,因为没学过.net+c#,现在接口代码全靠 ai 写怎么办 [分享创造] 开源轻量级 WinForm 壁纸切换器 Wallpaper Switcher (C# / .NET 9) csharp 这回真成了脚本语言: dotnet run app.cs 小弟写了一个 ETLBox 写入数据到 ClickHouse 的组件, 需要用到的兄弟们可以看看 C#.net9wpf 项目这份.gitignore 规则可行吗?还有什么可以添加的吗? 有人试过从 WCF 迁移到 ASP.NET Core Web API 吗? 项目从.NET5.0 升级到 8.0,加起来 1.5 万行代码, Linux 下编译经常要半个小时,有的时候又几秒钟就能编译完, Windows 下一直非常正常,怎么排查? 分享一个使用 C#封装的 gRPC 组件 C# .NET 现在相对成熟的跨平台 UI 框架是否还是只有 Avalonia? MAUI 怎么样了 ASP .NET Core + EF Core + MySQL 这个统计查询在 3 亿条记录的表下每次查询都需要 2~4 分钟,优化的办法只有用触发器或是后台每小时定期统计吗? Avalonia UI 更新到 11 以后启动慢有办法优化吗? EF Core 这类较重的 ORM 框架适合塞进客户端吗?如果是用于本地 SQLite 数据库,有没有更好的选择? Windows 普通用户,可否禁用系统自带.net 3.5/4.8,仅安装最新.net 8/9? 同一程序内的消息队列,这样用单例的简易实现比 redis 的 Pub-Sub 效率高吗?如果不实现 Unsubscribe,有内存泄漏风险吗? Avalonia 11 后要从 ItemsControl 调用母 UserControl 的命令这种常见操作就必须每次都写这么长一坨东西吗? .NET build 到 wasm 后怎么看错误代码在哪个 .cs 文件的哪个位置? DevTools 和那个 Debug URL 里都只能看到 e.Message macOS 单用户环境 dotnet 装在 ~/.dotnet/ 还是 /usr/local/share/dotnet/ 更好? Rider 默认是前者,官网下载的 .pkg 默认是后者 efcore 中, 使用 FromSql 查询时, 如何设置 where in 参数? 有没有 .NET 大神帮忙看看困扰了好几个大神一年的内存泄露问题,优化了一年越变越严重,现在一小时崩一次 有用过 SQLSugar 的吗?能说说体验吗? .NET 大牛们,这次遇到了一个涉及知识盲区的 BUG,与 Redis 有关 求助大佬们,干了件蠢事,我都不理解我为什么要用 Rider 去装 SDK,导致现在删不掉也找不到了 nuget 服务器有问题了,不会也是那个 CrowdStrike 出问题导致的吧 为什么我已经在 Visual Studio 中安装了.Net 8.0,但是命令行显示的版本仍然是 6.0.31? 我使用 vscode,如何平稳的将.Net7.0 升级到.Net8.0? 我想重构我这个项目的前端,有什么好的建议?
visual studio code for .NET
gopher666 · 2024-03-11 · via .NET

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 呢? 可以与我一起讨论这个话题 **