Skip to content

Commit b4c12f4

Browse files
committed
重大升级
1 parent 8ea4463 commit b4c12f4

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

ApiChanges.3.x-4.0.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# 重大更新
2+
3+
## 3.x -> 4.0
4+
5+
dotnetCampus.CommandLine 4.0版本带来了全面的架构升级和功能增强,使命令行参数解析更加高效、灵活且易于使用。
6+
7+
### 主要更新内容
8+
9+
#### 1. 全面采用源代码生成器
10+
11+
- 完全使用源生成器技术,替代以前的手写解析器(`XxxParser`)和反射解析器(`RuntimeParser`
12+
- 相比上个版本,性能出现了轻微下降(换来了各种命令行风格的完全支持),好在保持在同一个数量级内,仍然比同类库快得多
13+
- 充分支持 AOT 编译,更适合现代 .NET 应用场景
14+
15+
#### 2. 全面增强的命令行风格支持
16+
17+
- 从原来支持 Linux/GNU、CMD、PowerShell 三种风格的有限子集,升级为全面支持五种完整命令行风格:
18+
- `CommandLineStyle.Flexible`(默认):智能识别多种风格
19+
- `CommandLineStyle.GNU`:符合 GNU 规范的风格
20+
- `CommandLineStyle.POSIX`:符合 POSIX 规范的风格
21+
- `CommandLineStyle.DotNet`:.NET CLI 风格
22+
- `CommandLineStyle.PowerShell`:PowerShell 风格
23+
- 全面支持各种命令行选项格式:
24+
- 长选项:`--option value``--option=value``--option:value`
25+
- 短选项:`-o value``-o=value``-o:value`
26+
- Windows风格:`/option value``/option:value`
27+
- 布尔选项:`--flag`(无值时自动设为true)、`--flag:true/false`
28+
- URL协议风格:`protocol://command/subcommand?param1=value&param2=value`
29+
30+
#### 3. 增强的类型系统支持
31+
32+
- 支持 C# 8.0+ 的 `init` 和 C# 11.0 的 `required` 关键字,支持不可变对象
33+
- 全面支持更多复杂数据类型:
34+
- 集合类型:数组、列表、只读集合、不可变集合
35+
- 字典类型:支持多种传入方式和分隔符
36+
- 枚举类型:支持枚举名称和数值
37+
- 增强类型转换能力,提供更友好的类型错误提示
38+
39+
#### 4. 改进的命令处理器模式
40+
41+
- `AddHandler<T>` 现在支持实现 `ICommandHandler` 接口的类型,可以在类型内部编写处理逻辑
42+
- 保留了通过委托方式传入处理逻辑的经典用法
43+
44+
### 破坏性变更和升级指南
45+
46+
1. **命名空间变更**`OptionAttribute``ValueAttribute``VerbAttribute` 的命名空间发生了变化。升级库后,您可能需要借助IDE来修正相关引用。
47+
48+
2. **参数解析选项变更**`CommandLine.Parse(args, xxx)` 的第二个参数已从简单的URL scheme字符串升级为完整的 `CommandLineParsingOptions` 对象:
49+
```csharp
50+
// 旧版本
51+
var commandLine = CommandLine.Parse(args, "myapp");
52+
53+
// 新版本
54+
var commandLine = CommandLine.Parse(args, new CommandLineParsingOptions { SchemeNames = ["myapp"] });
55+
// 或者使用预定义样式
56+
var commandLine = CommandLine.Parse(args, CommandLineParsingOptions.DotNet);
57+
```
58+
59+
3. **命名约定变更**:选项命名规则从 `PascalCase` 改为推荐使用 `kebab-case`
60+
```csharp
61+
// 旧版本(依然支持,但不再推荐)
62+
[Option("OutputFile")]
63+
64+
// 新版本(推荐)
65+
[Option("output-file")]
66+
```
67+
原因请见:[DCL101.md](/docs/analyzers/DCL101.md)
68+
69+
4. **标准处理器移除**:删除了 `AddStandardHandlers` 方法(用于自动处理 `--help``--version`)。这个功能在未来版本可能会以新形式回归,如有需要请暂时自行实现。
70+
71+
5. **过滤器机制移除**:删除了很少使用的 `CommandLineFilter` 机制,该机制主要为 `AddStandardHandlers` 提供支持。
72+
73+
### 保留的功能
74+
75+
本次升级范围很大,不过仍然尽量在更规范更强大的设计中保持了跟上个版本 API 的一致性。你原来的项目通常只进行命名空间的修改即可正常工作;调整选项的命名规则后可消除新引入的警告(我们提供了代码修改器辅助你自动采用新的命名规则)。
76+
77+
1. **多种命令行风格解析**:保留并增强了对多种命令行参数风格的支持
78+
2. **URL协议支持**:完整保留并改进了对URL协议格式命令行的解析
79+
3. **位置参数支持**:保留了对位置参数的支持,并增强了位置参数的处理能力
80+
4. **谓词(命令)支持**:保留并增强了对命令谓词的支持(如 `git commit``git push` 等形式)

0 commit comments

Comments
 (0)