WPF 项目使用 Grpc.Tools

1 WPF 项目使用 Grpc.Tools

1.1 方法一

把 proto 文件和 Grpc.Tools 单独建一个类库项目,WPF 项目引用这个类库项目。

解决 Grpc.Tools 自动生成的 CSharp 类无法被 WPF 项目识别引用的问题,使 WPF 项目能够成功通过编译。

参考链接:

1.2 方法二

csproj 属性中添加:<CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>

  <PropertyGroup>
    <TargetFramework>net6.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <PlatformTarget>x86</PlatformTarget>
    <CoreCompileDependsOn>$(CoreCompileDependsOn);Protobuf_Compile</CoreCompileDependsOn>
  </PropertyGroup>

网友情况分析如下:

  • 默认行为:
    • WPF 会创建一个临时项目,临时项目不执行 BeforeCompile 事件
    • Grpc.Tools 挂到了 BeforeCompile 事件上去生成代码
  • 解决办法:
    • 将 Grpc.Tools 挂到 WPF 临时项目程序集 CompileTemporaryAssembly 会执行的 CoreCompile 上,CoreCompile 依赖中添加 Protobuf_Compile 则编译时会执行 Protobuf_Compile 的事件 protoc 命令行来生成 CSharp 代码

参考链接:

2 使用公共项目定义 proto 的公共消息

好处:

  • 为保障 Google.Protobuf Nuget依赖包版本一致性,并只生成一次公共 proto 类文件,避免重复定义的冲突,采用 Common 项目引用方式引用 Google.Protobuf 和 import 的公共 proto
  • 使用公共项目管理 proto 定义和自动生成的锲约类,可以在不同项目之间有效传播接口协议
  • 便于其他项目在有特异的消息类型、锲约、rpc 接口定义时,能够新的 proto 文件中直接引用 common 的 proto 文件

应用此种架构官方示例 Liber

参考链接:

posted @ 2023-06-15 10:58  TXRock  阅读(346)  评论(0编辑  收藏  举报