本文档描述了 Protocol Buffers (protobuf) 在该仓库中的 C# 实现。它涵盖了 C# 代码生成和运行时库的架构、组件和功能。
Protocol Buffers 的 C# 实现包含两个主要组件:
Google.Protobuf.dll),提供消息处理、序列化和其他核心功能。这些组件使 .NET 开发人员能够在他们的应用程序中高效地使用 Protocol Buffers。
来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj1-56
来源:csharp/Google.Protobuf.Tools.nuspec1-38
Google.Protobuf 运行时库提供了在 C# 中处理 Protocol Buffer 消息所需的核心功能。它以 NuGet 包的形式分发,并且是一个强命名程序集。
该库支持多个 .NET 框架以实现最大兼容性。
| 目标框架 | 描述 | 优化 |
|---|---|---|
| .NET Standard 1.1 | 最广泛的兼容性 | 基础功能 |
| .NET Standard 2.0 | 现代 .NET 实现 | 快速字符串操作 |
| .NET Framework 4.5 | 传统完整框架 | 基础功能 |
| .NET 5.0 | 现代 .NET | 快速字符串操作、SIMD 支持 |
来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj11-37
对于较新的目标框架,该库包含增强性能的优化。
GOOGLE_PROTOBUF_SUPPORT_FAST_STRING:启用 .NET Standard 2.0 和 .NET 5.0+,提供更高效的字符串处理。GOOGLE_PROTOBUF_SIMD:启用 .NET 5.0+,使用 SIMD 指令加速某些操作的处理。来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj31-37
该库的依赖项最少,以确保轻量级集成。
System.Memory(适用于 .NET Framework 4.5 和 .NET Standard 1.1/2.0)System.Runtime.CompilerServices.Unsafe(适用于 .NET Standard 2.0)来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj45-54
C# 实现通过两个 NuGet 包进行分发:
来源:csharp/Google.Protobuf.Tools.nuspec1-38 csharp/src/Google.Protobuf/Google.Protobuf.csproj1-56
主要的运行时库,提供:
包含代码生成工具:
protoc)二进制文件.proto 文件Tools 包包含适用于以下系统的 protoc 可执行文件:
来源:csharp/Google.Protobuf.Tools.nuspec18-37
在 C# 中使用 Protocol Buffers 时,工作流程包括从 .proto 文件生成 C# 类。使用 C# 插件的 protoc 编译器会为 .proto 文件中定义的每个消息和枚举生成强类型 C# 类。
对于 .proto 文件中的每个消息,代码生成器会生成:
Parser 实例,用于反序列化消息。WriteTo、ToByteArray 等)。对于 .proto 文件中的枚举,代码生成器会生成 C# 枚举类型。
Google.Protobuf.Tools 包通过 Google.Protobuf.Tools.targets 文件提供了 MSBuild 集成。这使得代码生成成为构建过程的一部分。
来源:csharp/Google.Protobuf.Tools.nuspec35-36
C# 实现支持所有主要的 Protocol Buffers 功能:
C# 实现的版本信息保存在 .csproj 文件中。
来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj8
C# 实现使用标准的 .NET SDK 工具进行构建。该项目使用强名称签名来保证程序集标识,并与已签名的程序集兼容。
来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj13-14
有关 Protocol Buffers 系统的具体方面的更多详细信息: