当前位置: 首页 > news >正文

面向 C# 初学者的完整教程

🧱 一、项目结构说明

你的项目大致结构如下:

TaskManager/
├── backend/
│   ├── TaskManager.Core/           // 实体类和接口
│   ├── TaskManager.Infrastructure/ // 数据库、服务实现
│   └── TaskManager.API/            // Web API 入口(控制器 + Program.cs)
└── frontend/                       // React/Next.js 前端

✅ 二、安装依赖项

你需要先确保 .NET SDK 已安装:

1. 检查 .NET SDK 是否安装

dotnet --version

如果没有,请去官网下载并安装:https://dotnet.microsoft.com/en-us/download


2. 安装 Entity Framework Core 相关包(在项目目录执行)

# 进入 Infrastructure 项目目录
cd TaskManager.Infrastructure# 安装数据库相关包(你使用的是 SQL Server)
dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools
dotnet add package BCrypt.Net-Next     # 用户密码加密# 如果你有 API 项目也需使用 EF Core 工具支持迁移
cd ../TaskManager.API
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer

🛠️ 三、构建项目

1. 回到根目录构建整个项目解决方案

cd D:\Users\gento\RiderProjects\TaskManager\backend
dotnet build

如果你已经在用 Rider 或 Visual Studio,也可以直接点击“Build”按钮。


🚀 四、数据库迁移与更新

你需要先根据实体类生成数据库表:

1. 创建数据库迁移(注意指定项目)

cd TaskManager.API
dotnet ef migrations add InitialCreate --project ../TaskManager.Infrastructure

2. 执行迁移,更新数据库

dotnet ef database update --project ../TaskManager.Infrastructure

🏃 五、运行 API 项目

运行 TaskManager.API 项目:

cd ../TaskManager.API
dotnet run

运行后你会看到:

Now listening on: http://localhost:5201

你可以用 Postman 或浏览器访问接口,例如:

  • http://localhost:5201/api/tasks
  • http://localhost:5201/api/auth/register

🧪 六、常见问题速查

问题解决方法
localStorage 报错typeof window !== 'undefined' 判断是否在浏览器环境
Token 报 401检查是否正确设置 Bearer 头、是否数据库已更新并包含用户表
EF 报 Invalid object name是数据库中表未创建成功,请重新执行迁移或检查连接字符串
DLL 被锁定,编译失败关闭正在运行的 API(任务管理器或 Ctrl+C),然后重试构建

📌 七、建议的开发流程

  1. 每次修改实体类后,执行一次迁移:dotnet ef migrations add ...
  2. 每次迁移后更新数据库:dotnet ef database update
  3. 如果构建失败先 dotnet clean,然后 dotnet build
  4. 本地调试:先运行后端,再启动前端(Next.js)

相关文章:

  • “个体”不是“单一”-《分析模式》漫谈58
  • visio导出的图片过大导致latex格式转成pdf之后很不清楚
  • 千问2.5-VL-7B的推理、微调、部署_笔记2
  • 220V转直流非隔离传感器供电电源芯片WT5105
  • CS144 Lab2实战记录:TCP接收器的实现
  • 每日学习Java之一万个为什么(JUC)
  • 面试篇:Java并发与多线程
  • 通信安全员考试重难点考哪些?
  • 服务器编译环境配置及数据接收脚本编写(11)
  • C++类与继承
  • 三、Python编程基础03
  • URP-UGUI相关知识
  • 高光谱相机在工业检测中的应用:LED屏检、PCB板缺陷检测
  • CONDA:用于 Co-Salient 目标检测的压缩深度关联学习(总结)
  • openharmony5.0.0中C++公共基础类测试-线程相关(一)
  • 【速写】hook与fx
  • 国际化不生效
  • 聊聊SpringAI流式输出的底层实现?
  • 安全复健|windows常见取证工具
  • 从零开始搭建Django博客③--前端界面实现
  • 下周起上海浦东将投放5000万元消费券,预计分五周发放
  • 范福生受审:任高密市长、市委书记时滥用职权,致公共财产利益重大损失
  • 沂水县委书记陈士贤,跨市履新泰安市委常委、组织部部长
  • 读图丨漫游者秦龙,一生为经典画插图
  • 特朗普激发加拿大爱国热情:大选提前投票人数创纪录,魁北克分离情绪被冲淡
  • 南京84.57亿元成交8宗宅地:仅秦淮区一宗地块溢价成交