菜单

C# 实现

相关源文件

本文档描述了 Protocol Buffers (protobuf) 在该仓库中的 C# 实现。它涵盖了 C# 代码生成和运行时库的架构、组件和功能。

概述

Protocol Buffers 的 C# 实现包含两个主要组件:

  1. 一个运行时库(Google.Protobuf.dll),提供消息处理、序列化和其他核心功能。
  2. 一个代码生成器,用于从 .proto 文件生成 C# 类。

这些组件使 .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

NuGet 包

C# 实现通过两个 NuGet 包进行分发:

来源:csharp/Google.Protobuf.Tools.nuspec1-38 csharp/src/Google.Protobuf/Google.Protobuf.csproj1-56

Google.Protobuf

主要的运行时库,提供:

  • 核心消息接口和基类
  • 序列化和反序列化逻辑
  • 反射支持
  • 预定义类型(Well-known types)实现

Google.Protobuf.Tools

包含代码生成工具:

  • 多平台协议编译器(protoc)二进制文件
  • 预定义类型(Well-known types).proto 文件
  • MSBuild 集成,简化项目设置

Tools 包包含适用于以下系统的 protoc 可执行文件:

  • Windows (x86, x64)
  • Linux (x86, x64)
  • macOS (x64)

来源:csharp/Google.Protobuf.Tools.nuspec18-37

代码生成

在 C# 中使用 Protocol Buffers 时,工作流程包括从 .proto 文件生成 C# 类。使用 C# 插件的 protoc 编译器会为 .proto 文件中定义的每个消息和枚举生成强类型 C# 类。

生成的类结构

对于 .proto 文件中的每个消息,代码生成器会生成:

  1. 一个 C# 类,其中包含每个字段的属性。
  2. 一个静态的 Parser 实例,用于反序列化消息。
  3. 用于序列化的方法(WriteToToByteArray 等)。
  4. 用于反射的描述符(Descriptor)对象。

对于 .proto 文件中的枚举,代码生成器会生成 C# 枚举类型。

MSBuild 集成

Google.Protobuf.Tools 包通过 Google.Protobuf.Tools.targets 文件提供了 MSBuild 集成。这使得代码生成成为构建过程的一部分。

来源:csharp/Google.Protobuf.Tools.nuspec35-36

功能支持

C# 实现支持所有主要的 Protocol Buffers 功能:

  • 消息和嵌套消息
  • 枚举
  • 扩展
  • Oneof 字段
  • Map
  • 预定义类型(Well-known types)
  • Proto2 和 Proto3 语法

版本信息

C# 实现的版本信息保存在 .csproj 文件中。

来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj8

构建与测试

C# 实现使用标准的 .NET SDK 工具进行构建。该项目使用强名称签名来保证程序集标识,并与已签名的程序集兼容。

来源:csharp/src/Google.Protobuf/Google.Protobuf.csproj13-14

延伸阅读

有关 Protocol Buffers 系统的具体方面的更多详细信息:

  • 有关通用 Protocol Buffers 概念,请参阅 概述
  • 有关预定义类型(Well-Known Types),请参阅 预定义类型
  • 有关构建系统集成的详细信息,请参阅 构建系统