任务47:用VS Code开发和编译调试.net项目
- 下载 vs code system版本
- system版本在下载页面下载按钮下面的 Other platforms 中
- 如果是 user版,会遇到自动调用32位netcore运行时,没法启动调试(我没在32位系统开发过不知道能不能行,所以还是安装system版本的code吧)
- 找到扩展面板,搜索C#扩展安装好扩展
- 安装.NetCore SDK,下载:.NetCore2.2 (建议2.2.300+,3.0以下版本,不能跨大版本。ETCore5.0 不支持netcore3)
- 设置netsdk的windows环境变量,在用户变量中设置
- 配置环境变量名: MSBuildSdksPath
- 环境变量值:C:\Program Files\dotnet\sdk\2.2.300\Sdks (根据你自己的安装目录)
- 安装 .NETFramework
- 比如打开项目报错缺少 .NETFFramework4.7.1 下载页面选择 4.7.1 下载页面上的 Developer Pack
- 安装好后,在win控制面板中打开程序和功能中,就可以看到安装好的.NETFramework的SDK与Targeting Pack
- 指定项目使用的netcore运行时版本
-
通过 global.json 文件,定义运行时使用的 .NET Core SDK 版本
-
命令行到达项目的根目录:dotnet new globaljson --sdk-version 2.2.300,在你的项目中创建一个global.json 文件
-
命令行在项目的根目录查看此项目netcore版本:dotnet --version,确认是环境变量中设置的netcore版本
-
- 用vs code打开项目,根据提示完成一次"Restore"包还原操作。
- 如果打开运行过项目,把你的解决方案中的所有项目中的obj目录全部删除,打开code重新Restore
用vscode打开项目载入解决方案
可能刚开始用不习惯,不知道打开哪个目录,其实你打开哪个目录,他就在哪个目录创建.vscode,并找到这个目录下及其子目录中的.sln,.csproj载入开发环境。
如果是unity开发的项目,设置好开发扩展工作的情况下,会自动生成解决方案.sln与项目.csproj文件。
如果是非unity项目,可以安装 vscode-solution-explorer 扩展,在vs code中创建解决方案和在方案中创建项目。
关于安装了多个netcore版本
下载安装了多个版本的.netcore sdk,通过 global.json 文件,定义运行时使用的 .NET Core SDK 版本
命令行查看多个版本.netcore sdk版本号: dotnet --info
命令行到达你项目的根目录:dotnet new globaljson --sdk-version 2.2.300,在你的项目中创建一个global.json 文件
在多个项目中创建使用不同版本的global.json 文件,然后命令行到达这些项目的根目录:dotnet --version,观察当前使用的.netcore sdk版本
安装好netcore sdk后,要去查一下对应的netcore版本号
这个文章中有创建globaljson的动画演示看看 https://blog.csdn.net/sD7O95O/article/details/81916850
关于launch与task
进入下载项目的根目录找到.vscode目录,删除里面的launch.json,tasks.json(没有不用删),然后找到debug面板,自己创建这两个文件
参考下面内容思考如何确定项目编译输出目录,debug运行程序
{ // Use IntelliSense to find out which attributes exist for C# debugging // Use hover for the description of the existing attributes // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md "version": "0.2.0", "configurations": [ { //编译调试app.dll "name": "ET-app (console)", "type": "coreclr", "request": "launch", "preLaunchTask": "buildApp", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/Bin/App.dll", "args": [], "cwd": "${workspaceFolder}/Bin", // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console": "internalConsole", "stopAtEntry": false }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ] }
结合tasks.json思考,如何编译某个task时,通过"dependsOn"先编译依赖的另一个task。
{ "version": "2.0.0", "tasks": [ { "label": "buildFix", "command": "dotnet", "type": "process", "args": [ "build", "${workspaceFolder}/Server/Hotfix/Server.Hotfix.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { "label": "buildApp", "command": "dotnet", "type": "process", //"dependsOn"先编译依赖的buildFix任务 "dependsOn": [ "buildFix" ], "args": [ "build", "${workspaceFolder}/Server/App/Server.App.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { "label": "publish", "command": "dotnet", "type": "process", "args": [ "publish", "${workspaceFolder}/Server/App/Server.App.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" }, { "label": "watch", "command": "dotnet", "type": "process", "args": [ "watch", "run", "${workspaceFolder}/Server/App/Server.App.csproj", "/property:GenerateFullPaths=true", "/consoleloggerparameters:NoSummary" ], "problemMatcher": "$msCompile" } ] }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)