NewLife/X

v11.15.2026.0501 JSON新增PropertyNaming统一命名策略,支持驼峰/下划线等多种风格;SpanWriter/SpanReader新增WriteValue/ReadValue通用方法覆盖全基础类型;ExtendableConverter增强属性忽略条件支持;修复AssemblyResolve递归触发配置初始化导致栈溢出;修复Copy时string?字段null空指针异常;优化ApiHttpClient参数传递
石头 authored at 2026-05-01 11:09:41
8a4ecf6
Tree
1 Parent(s) 95dfad4
Summary: 10 changed files with 329 additions and 1044 deletions.
Deleted +0 -77
.github/instructions/caching.instructions.md
Deleted +0 -108
.github/instructions/configuration.instructions.md
Added +304 -0
Deleted +0 -573
.github/instructions/net.instructions.md
Deleted +0 -115
.github/instructions/remoting.instructions.md
Deleted +0 -80
.github/instructions/security.instructions.md
Deleted +0 -87
.github/instructions/serialization.instructions.md
Modified +21 -0
Modified +2 -2
Modified +2 -2
Deleted +0 -77
.github/instructions/caching.instructions.md
Deleted +0 -108
.github/instructions/configuration.instructions.md
Added +304 -0
diff --git a/.github/instructions/cube.instructions.md b/.github/instructions/cube.instructions.md
new file mode 100644
index 0000000..98613fe
--- /dev/null
+++ b/.github/instructions/cube.instructions.md
@@ -0,0 +1,304 @@
+# Cube 协作指令
+
+本指令面向新生命团队(NewLife)开源 Web 快速开发框架 Cube(魔方),帮助 Copilot 在 .NET 项目中正确使用 Cube 进行 Web 管理后台开发。
+
+---
+
+## 1. Cube 定位与边界
+
+### 1.1 技术栈定位
+
+```
+NewLife.Core(基础库)
+       ↓
+   NewLife.XCode(数据中间件)→ xcode.instructions.md
+       ↓
+   NewLife.Cube(Web 快速开发框架)← 本指令
+```
+
+### 1.2 职责边界
+
+| 层级 | 职责 | 指令文件 |
+|------|------|---------|
+| **NewLife.XCode** | 数据建模、ORM、实体增删改查 | `xcode.instructions.md` |
+| **NewLife.Cube** | Web 管理后台、控制器、视图、权限、菜单 | 本指令 |
+
+### 1.3 本指令覆盖范围
+
+**包含**:
+- Web 控制器开发与定制
+- 列表页、表单页、详情页配置
+- 菜单与权限管理
+- 魔方区域(Area)管理
+
+**不包含**(由 xcode.instructions.md 负责):
+- 数据模型设计(Model.xml)
+- 实体类生成
+- 数据库 CRUD 底层操作
+
+---
+
+## 2. 快速开始
+
+### 2.1 创建 Cube 项目
+
+```powershell
+# 安装模板
+dotnet new install NewLife.Templates
+
+# 创建 Web 项目
+dotnet new cube -n {系统名}Web
+
+# 添加数据类库引用
+dotnet add reference ../Zero.Data/Zero.Data.csproj
+```
+
+### 2.2 自动生成控制器
+
+在 Model.xml 中配置 `CubeOutput` 后,执行 `xcode` 会自动生成:
+- 区域类(`*Area.cs`)
+- 控制器(`*Controller.cs`)
+
+```xml
+<Option>
+  <DisplayName>订单管理</DisplayName>
+  <CubeOutput>../../OrderWeb/Areas/Order</CubeOutput>
+</Option>
+```
+
+---
+
+## 3. 控制器开发
+
+### 3.1 控制器基类
+
+| 基类 | 用途 |
+|------|------|
+| `EntityController<T>` | 标准 CRUD 控制器 |
+| `ReadOnlyEntityController<T>` | 只读控制器(日志表等) |
+
+### 3.2 控制器结构
+
+```csharp
+[Menu(100, true, Icon = "fa-table")]
+[OrderArea]
+public class OrderController : EntityController<Order>
+{
+    static OrderController()
+    {
+        // 列表字段配置
+        ListFields.RemoveCreateField().RemoveRemarkField();
+        
+        // 添加自定义列
+        //{
+        //    var df = ListFields.AddListField("details", null, "Remark");
+        //    df.DisplayName = "查看明细";
+        //    df.Url = "OrderDetail?orderId={Id}";
+        //}
+    }
+
+    /// <summary>高级搜索</summary>
+    protected override IEnumerable<Order> Search(Pager p)
+    {
+        var start = p["dtStart"].ToDateTime();
+        var end = p["dtEnd"].ToDateTime();
+        var key = p["Q"] + "";
+
+        return Order.Search(start, end, key, p);
+    }
+}
+```
+
+### 3.3 菜单配置
+
+```csharp
+[Menu(100, true, Icon = "fa-table")]
+```
+
+| 参数 | 说明 |
+|------|------|
+| 第一个参数 | 菜单排序(数字越大越靠前) |
+| 第二个参数 | 是否可见 |
+| `Icon` | Font Awesome 图标 |
+
+---
+
+## 4. 列表页配置
+
+### 4.1 ListFields 配置
+
+```csharp
+static OrderController()
+{
+    // 移除字段
+    ListFields.RemoveField("Id", "CreateUser");
+    ListFields.RemoveCreateField();  // 移除创建者/创建时间
+    ListFields.RemoveRemarkField();  // 移除备注
+    
+    // 添加链接列
+    {
+        var df = ListFields.GetField("OrderNo") as ListField;
+        df.Url = "Order/Detail?id={Id}";
+        df.Target = "_blank";
+    }
+    
+    // 添加操作列
+    {
+        var df = ListFields.AddListField("details", null, "Remark");
+        df.DisplayName = "查看明细";
+        df.Url = "OrderDetail?orderId={Id}";
+        df.DataVisible = e => (e as Order).Details > 0;
+    }
+}
+```
+
+### 4.2 搜索配置
+
+通过 Model.xml 中的 `ShowIn` 属性控制字段是否出现在搜索区。
+
+---
+
+## 5. 表单页配置
+
+### 5.1 FormFields 配置
+
+```csharp
+static OrderController()
+{
+    // 添加表单只读
+    {
+        var df = AddFormFields.GetField("OrderNo");
+        df.ReadOnly = true;
+    }
+}
+```
+
+### 5.2 字段分组
+
+通过 Model.xml 中的 `Category` 属性控制字段分组。
+
+---
+
+## 6. 区域(Area)管理
+
+### 6.1 区域类
+
+```csharp
+[DisplayName("订单管理")]
+public class OrderArea : AreaBase
+{
+    public OrderArea() : base(nameof(OrderArea).TrimEnd("Area")) { }
+}
+```
+
+### 6.2 目录结构
+
+```
+Areas/
+└── Order/
+    ├── OrderArea.cs
+    └── Controllers/
+        ├── OrderController.cs
+        └── OrderDetailController.cs
+```
+
+---
+
+## 7. 权限管理
+
+### 7.1 内置权限
+
+Cube 内置用户、角色、菜单、权限管理,支持:
+- 基于角色的访问控制(RBAC)
+- 菜单级权限
+- 按钮级权限(增删改查导出)
+
+### 7.2 权限检查
+
+```csharp
+// 控制器中检查权限
+if (!HasPermission("OrderExport"))
+{
+    throw new InvalidOperationException("无导出权限");
+}
+```
+
+---
+
+## 8. 常用扩展
+
+### 8.1 自定义搜索
+
+```csharp
+protected override IEnumerable<Order> Search(Pager p)
+{
+    var status = p["status"].ToInt(-1);
+    var start = p["dtStart"].ToDateTime();
+    var end = p["dtEnd"].ToDateTime();
+    var key = p["Q"] + "";
+
+    var where = new WhereExpression();
+    if (status >= 0) where &= Order._.Status == status;
+    where &= Order._.CreateTime.Between(start, end);
+    if (!key.IsNullOrEmpty()) where &= Order._.OrderNo.Contains(key) | Order._.Remark.Contains(key);
+
+    return Order.FindAll(where, p);
+}
+```
+
+### 8.2 导出定制
+
+```csharp
+protected override IEnumerable<Order> ExportData(Pager p)
+{
+    p.PageSize = 10000;  // 导出数量限制
+    return Search(p);
+}
+```
+
+### 8.3 表单保存前处理
+
+```csharp
+protected override Int32 OnInsert(Order entity)
+{
+    entity.OrderNo = GenerateOrderNo();
+    return base.OnInsert(entity);
+}
+
+protected override Int32 OnUpdate(Order entity)
+{
+    // 更新前校验
+    return base.OnUpdate(entity);
+}
+```
+
+---
+
+## 9. 与 XCode 的协作
+
+1. **数据模型**:在 `xcode.instructions.md` 指导下设计 Model.xml
+2. **控制器生成**:配置 `CubeOutput` 后执行 `xcode` 自动生成
+3. **定制开发**:在生成的控制器基础上进行业务定制
+4. **字段显示**:通过 Model.xml 的 `ShowIn`、`ItemType`、`Category` 控制
+
+---
+
+## 10. Copilot 行为指引
+
+### 10.1 控制器开发时
+
+1. 继承正确的基类(`EntityController` 或 `ReadOnlyEntityController`)
+2. 在静态构造函数中配置 `ListFields`
+3. 重写 `Search` 方法实现高级搜索
+
+### 10.2 边界意识
+
+- 数据模型和实体操作 → `xcode.instructions.md`
+- Web 控制器和界面 → 本指令
+- 基础编码规范 → `copilot-instructions.md`
+
+### 10.3 生成代码后
+
+1. 检查控制器是否正确引用实体类
+2. 检查区域类是否正确注册
+3. 运行项目验证菜单和页面是否正常显示
Deleted +0 -573
.github/instructions/net.instructions.md
Deleted +0 -115
.github/instructions/remoting.instructions.md
Deleted +0 -80
.github/instructions/security.instructions.md
Deleted +0 -87
.github/instructions/serialization.instructions.md
Modified +21 -0
diff --git a/ChangeLog.md b/ChangeLog.md
index 60ac86e..4a16bf5 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,26 @@
 # NewLife.Core 版本更新记录
 
+## v11.15.2026.0501 (2026-05-01)
+
+### 序列化增强
+- **SpanWriter/SpanReader WriteValue/ReadValue**:新增对所有基础类型的通用 `WriteValue`/`ReadValue` 方法,完整单元测试覆盖,零分配读写更易用
+- **字符串截断方法统一命名**:重构字符串截断扩展方法,统一命名规范,提升 API 一致性
+
+### JSON 增强
+- **PropertyNaming 统一命名策略**:引入 `PropertyNaming` 枚举,支持驼峰、下划线、帕斯卡等多种 JSON 属性命名策略,可全局配置
+- **Json 命名策略序列化增强**:增强序列化/反序列化对命名策略的完整应用,覆盖更多边界场景
+- **ExtendableConverter 属性忽略增强**:增强 `ExtendableConverter` 对 `ShouldIgnore` 忽略条件的支持,灵活控制字段序列化
+
+### 网络与 HTTP
+- **集成测试增强**:统一集成测试客户端,增强用例覆盖;优化 `ApiHttpClient` 参数传递逻辑
+
+### Bug 修复
+- **[fix]** 修复 `AssemblyResolve` 事件递归触发配置初始化,导致栈溢出的问题
+- **[fix]** 修复对象 `Copy` 时,目标 `string?` 字段为 null 导致的空指针异常
+- **[chore]** 程序集解析异常时写入 Trace 调试信息,便于排查加载失败问题
+
+---
+
 ## v11.14.2026.0402 (2026-04-02)
 
 ### 序列化增强
Modified +2 -2
diff --git a/NewLife.Core/NewLife.Core.csproj b/NewLife.Core/NewLife.Core.csproj
index 6e572a0..86f0c59 100644
--- a/NewLife.Core/NewLife.Core.csproj
+++ b/NewLife.Core/NewLife.Core.csproj
@@ -7,7 +7,7 @@
     <Description>Core library of NewLife framework. Provides high-performance infrastructure for building scalable applications: logging (file/network), configuration (XML/JSON/HTTP), cache (memory/distributed), network (TCP/UDP/HTTP/WebSocket), serialization (binary/XML/JSON), APM tracing, IoC container, actor model, timer scheduler, plugin framework, and more. Supports .NET Framework 4.5 to .NET 10. 核心组件库,为构建可扩展应用程序提供高性能基础设施。提供日志(文件/网络)、配置(XML/JSON/HTTP)、缓存(内存/分布式)、网络(TCP/UDP/HTTP/WebSocket)、序列化(Binary/XML/JSON)、APM性能追踪、对象容器、并行模型、定时调度、插件框架等。支持.NET Framework 4.5至.NET 10全版本。</Description>
     <Company>新生命开发团队</Company>
     <Copyright>©2002-2026 NewLife</Copyright>
-    <VersionPrefix>11.14</VersionPrefix>
+    <VersionPrefix>11.15</VersionPrefix>
     <VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
     <Version>$(VersionPrefix).$(VersionSuffix)</Version>
     <FileVersion>$(Version)</FileVersion>
@@ -32,7 +32,7 @@
     <RepositoryUrl>https://github.com/NewLifeX/X</RepositoryUrl>
     <RepositoryType>git</RepositoryType>
     <PackageTags>新生命团队;X组件;NewLife;$(AssemblyName)</PackageTags>
-    <PackageReleaseNotes>序列化:SpanWriter流模式+ISpanSerializable零拷贝增强+DbTable Span序列化+长度前缀读写+序列化配置Apply复用;JSON:JsonElement类型转换+ExtendableConverter重构+多特性属性名映射+IgnoreDataMember/XmlIgnore剔除;网络:LengthFieldCodec/IPacket多包链增强+SplitDataCodec修复;对象池新增GetAsync异步借出;Reflect热点路径全面优化;新增IServiceResolver服务解析器;DefaultUserAgent支持URL编码非ASCII字符</PackageReleaseNotes>
+    <PackageReleaseNotes>JSON新增PropertyNaming统一命名策略,支持驼峰/下划线等多种风格;SpanWriter/SpanReader新增WriteValue/ReadValue通用方法覆盖全基础类型;ExtendableConverter增强属性忽略条件支持;修复AssemblyResolve递归触发配置初始化导致栈溢出;修复Copy时string?字段null空指针异常;优化ApiHttpClient参数传递</PackageReleaseNotes>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PublishRepositoryUrl>true</PublishRepositoryUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>
Modified +2 -2
diff --git a/NewLife.Security/NewLife.Security.csproj b/NewLife.Security/NewLife.Security.csproj
index b845014..0d59e3b 100644
--- a/NewLife.Security/NewLife.Security.csproj
+++ b/NewLife.Security/NewLife.Security.csproj
@@ -6,7 +6,7 @@
     <Description>Extended cryptographic algorithms for NewLife framework. Provides advanced encryption capabilities including ECC (Elliptic Curve Cryptography), ECDSA digital signature, and more. 扩展加密算法库,提供椭圆曲线加密(ECC)、ECDSA数字签名等高级加密能力。基于.NET CNG平台的安全扩展组件。</Description>
     <Company>新生命开发团队</Company>
     <Copyright>©2002-2026 NewLife</Copyright>
-    <VersionPrefix>11.11</VersionPrefix>
+    <VersionPrefix>11.15</VersionPrefix>
     <VersionSuffix>$([System.DateTime]::Now.ToString(`yyyy.MMdd`))</VersionSuffix>
     <Version>$(VersionPrefix).$(VersionSuffix)</Version>
     <FileVersion>$(Version)</FileVersion>
@@ -28,7 +28,7 @@
     <RepositoryUrl>https://github.com/NewLifeX/X</RepositoryUrl>
     <RepositoryType>git</RepositoryType>
     <PackageTags>新生命团队;X组件;NewLife;$(AssemblyName)</PackageTags>
-    <PackageReleaseNotes></PackageReleaseNotes>
+    <PackageReleaseNotes>跟随 NewLife.Core v11.15 同步发版;依赖升级</PackageReleaseNotes>
     <PackageLicenseExpression>MIT</PackageLicenseExpression>
     <PublishRepositoryUrl>true</PublishRepositoryUrl>
     <EmbedUntrackedSources>true</EmbedUntrackedSources>