원클릭으로
dotnet-dev
.NET Core 开发规范,包含命名约定、异常处理、Furion + SqlSugar 最佳实践等
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
.NET Core 开发规范,包含命名约定、异常处理、Furion + SqlSugar 最佳实践等
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
在任何创意工作之前必须使用此技能 - 包括头脑风暴、功能设计、需求分析、创建功能、构建组件、添加功能或修改行为或提及想开发一个/想做一个等相关语义相近时。任何跟功能设计探讨时需使用。在实现之前探索用户意图、需求和设计。
SQL Server 数据库执行器技能。用于连接 SQL Server 数据库并执行除 DELETE 以外的所有 SQL 操作,包括 SELECT 查询、INSERT 插入、UPDATE 更新、CREATE/ALTER 结构管理、存储过程执行等。当用户需要查询数据库、修改数据、管理表结构或执行存储过程时触发此技能。
UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient.
| name | dotnet-dev |
| description | .NET Core 开发规范,包含命名约定、异常处理、Furion + SqlSugar 最佳实践等 |
| version | v3.0 |
| paths | ["**/*.cs","**/*.csproj","**/*.sln","**/appsettings.json","**/appsettings.*.json"] |
参考来源: Microsoft C# 编码约定、Furion 官方文档
# dotnet CLI
dotnet build # 编译
dotnet test # 运行测试
dotnet run # 运行项目
dotnet publish -c Release # 发布
# 格式化与分析
dotnet format # 格式化代码
dotnet build /p:TreatWarningsAsErrors=true # 严格检查
| 类型 | 规则 | 示例 |
|---|---|---|
| 命名空间 | PascalCase,公司.产品.模块 | MyCompany.Project.Services |
| 类/接口 | PascalCase,名词/名词短语 | UserService, IUserRepository |
| 方法名 | PascalCase,动词开头 | FindById, IsValid |
| 常量 | PascalCase | MaxRetryCount |
| 私有字段 | _camelCase 前缀下划线 | _userRepository |
| 布尔属性 | Is/Has/Can 前缀 | IsActive, HasPermission |
public class Example
{
// 1. 常量
public const string DefaultName = "value";
// 2. 静态字段
private static readonly ILogger<Example> _logger;
// 3. 实例字段
private readonly IUserRepository _userRepository;
private long _id;
// 4. 构造函数
public Example(IUserRepository userRepository)
{
_userRepository = userRepository;
}
// 5. 属性
public long Id { get; set; }
// 6. 公共方法
public void DoSomething() { }
// 7. 私有方法
private void HelperMethod() { }
}
// ✅ 好:捕获具体异常,添加上下文
try
{
user = await _userRepository.FindByIdAsync(id);
}
catch (DbException ex)
{
throw new ServiceException($"Failed to find user: {id}", ex);
}
// ✅ 好:资源自动释放
await using var stream = File.OpenRead(filePath);
// ❌ 差:捕获过宽
catch (Exception ex) { Console.WriteLine(ex); }
// ✅ 使用 Nullable Reference Types
public User? FindById(long id)
{
return _userRepository.FindById(id);
}
// ✅ 参数校验
public void UpdateUser(User user)
{
ArgumentNullException.ThrowIfNull(user);
}
// ✅ 安全的空值处理
var name = user?.Name ?? "Unknown";
// ✅ 使用 async/await
public async Task<User> GetUserAsync(long id)
{
return await _userRepository.FindByIdAsync(id);
}
// ✅ 并行执行
var tasks = userIds.Select(id => GetUserAsync(id));
var users = await Task.WhenAll(tasks);
// ❌ 差:阻塞异步调用
var user = GetUserAsync(id).Result; // 可能死锁
public class UserServiceTests
{
[Fact]
public async Task FindById_WhenUserExists_ReturnsUser()
{
// Arrange
var mockRepo = new Mock<IUserRepository>();
mockRepo.Setup(r => r.FindByIdAsync(1L))
.ReturnsAsync(new User { Id = 1, Name = "test" });
var service = new UserService(mockRepo.Object);
// Act
var result = await service.FindByIdAsync(1L);
// Assert
Assert.NotNull(result);
Assert.Equal("test", result.Name);
}
}
// ✅ 动态 API(自动生成路由)
[DynamicApiController]
public class UserService : IDynamicApiController
{
private readonly ISqlSugarRepository<User> _repository;
public UserService(ISqlSugarRepository<User> repository)
{
_repository = repository;
}
// GET /api/user/{id}
public async Task<User> GetAsync(long id)
{
return await _repository.GetByIdAsync(id);
}
// POST /api/user
public async Task<long> AddAsync(UserDto dto)
{
var user = dto.Adapt<User>();
return await _repository.InsertReturnIdentityAsync(user);
}
}
// ✅ 传统 Controller(需要更多控制时)
[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase
{
[HttpGet("{id}")]
public async Task<ActionResult<UserDto>> GetById(long id)
{
var user = await _userService.GetAsync(id);
return user is null ? NotFound() : Ok(user);
}
}
| 陷阱 | 解决方案 |
|---|---|
| N+1 查询 | 使用 Includes() 或导航属性 |
| 循环拼接字符串 | 使用 StringBuilder |
| 频繁装箱拆箱 | 使用泛型集合 |
| 未使用异步 IO | 使用 async/await |
// ✅ 结构化日志
_logger.LogDebug("Finding user by id: {UserId}", userId);
_logger.LogInformation("User {Username} logged in", username);
_logger.LogError(exception, "Failed to process order {OrderId}", orderId);
// ❌ 差:字符串拼接
_logger.LogDebug("Finding user by id: " + userId);
完整规范见 references/dotnet-style.md,包含:
📋 本回复遵循:
dotnet-dev- [具体章节]