> For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://buildwithfern.com/learn/llms.txt.

## 2.31.0

**`(feat):`** 在 IR 中增加对 `base64` 原始类型的支持，用于表示 Protobuf byte\[]。

**`(fix):`** 修复 `.ToProto` 和 `.FromProto` 映射器方法，以支持嵌套在消息描述符中的枚举。

## 2.30.3

**`(fix):`** 为 `google.rpc.Status` 类型添加更好的支持，并停止为 `google.api` 和 `google.rpc` 类型生成冗余的包装器类型。

## 2.30.2

**`(fix):`** 修复 gRPC 代码生成，以支持具有数字标识符的枚举。

## 2.30.1

**`(fix):`** 修复 gRPC 代码生成，以支持具有数字标识符的枚举。

## 2.30.0

**`(feat):`** 添加 `sln-format` 配置选项。设置为 `"sln"` 可同时生成传统的 `.sln` 解决方案文件和现代的 `.slnx` 文件。默认值 `"slnx"` 仅生成 `.slnx` 文件。这对于需要与较旧的 .NET 工具或尚不支持 `.slnx` 格式的 CI 系统兼容的团队很有用。

```yaml
generators:
  - name: fernapi/fern-csharp-sdk
    config:
      sln-format: sln
```

## 2.29.0

**`(feat):`** 重构枚举 JSON 序列化以消除反射。每个枚举现在都获得一个生成的序列化器，使用静态字典查找，而不是在运行时使用 `Enum.GetValues`、`GetField`、`GetCustomAttributes` 和 `Activator.CreateInstance` 的通用 `EnumSerializer<T>` / `StringEnumSerializer<T>`。序列化器初始化速度提升约 1,000 倍（18 ns vs 18 us），内存分配减少 160 倍；稳定状态的吞吐量保持不变。生成的代码还与 NativeAOT 和 IL-trimming 兼容。

## 2.28.0

**`(feat):`** 为每个测试夹具生成单独的 WireMock 服务器，而不是在所有模拟服务器测试中共享单个全局服务器。每个测试类现在在 `[OneTimeSetUp]`/`[OneTimeTearDown]` 中启动和停止自己的 `WireMockServer`，测试夹具使用 `[Parallelizable(ParallelScope.Self)]` 注解，以便 NUnit 可以并行运行它们。

## 2.27.1

**`(fix):`** 修复重试测试断言以匹配 SDK 的缩进 JSON 序列化。

## 2.27.0

**`(feat):`** 通过以下方面改进 gRPC 代码生成：

1. 更新枚举表示和 .ToProto + .FromProto 映射器。
2. 修复渲染 gRPC 客户端引用的问题。
3. 更新 protoc-gen-openapi 以展开合成 oneof 类型（参考：\<[https://github.com/fern-api/protoc-gen-openapi/releases/tag/v0.1.7>）](https://github.com/fern-api/protoc-gen-openapi/releases/tag/v0.1.7>）)