如何在 C# 中为 gRPC 创建适当的自动生成代码?

How to create proper autogenerated code in C# for gRPC?

我在 C# 项目中创建了一个原型文件,并尝试通过构建解决方案来自动生成 C# 代码。 但是,扩展名 grpc.cs.

下的文件有问题
''' 

/// <summary>Creates a new client for Greeter</summary>
   /// <param name="channel">The channel to use to make remote calls.</param>
      public GreeterClient(grpc::Channel channel) : base(channel)
      {
      }

'''

上面的片段来自示例,其中 public GreeterClient 具有参数 (grpc::Channel channel) 但在下面的片段中,它是 (grpc::ChannelBase channel)

'''

/// <summary>Creates a new client for samples</summary>
/// <param name="channel">The channel to use to make remote calls.</param>
public samplesClient(grpc::ChannelBase channel) : base(channel)
{
}

'''

这会引发错误,提示 '无法找到客户端通道

如何配置生成grpc.cs文件以便参数是(grpc: :频道频道)

我不确定你在做什么(...试图自动生成...<- 你是说你手动 运行 协议?为什么?)

这是 .NET Framework 项目的示例,创建的 .NET Core 略有不同 - 这是 .NET Core 入门的绝佳资源:ASP.NET Core gRPC for WCF Developers

通常你做什么

  1. 创建项目并安装相关的 Nuget 包:GrpcGrpc.Core 以及最重要的 Grpc.Tools
  2. 添加新文件。随便命名,但扩展名必须是 .proto
  3. 在此原型文件中填充一些数据,例如:
syntax = "proto3";

option csharp_namespace = "MyNamespace";

...
...
  1. 鼠标右键点击这个文件然后selectProperties
  2. 在 'Properties' 面板中 select Protobuf 作为 Build action。所以它应该是这样的:

  1. 重建解决方案
  2. 添加另一个 C# 文件,任意命名
  3. 在此 C# 文件中开始引用您在 proto 文件中创建的结构。喜欢:

MyNamespace.MyServer server = new MyNamespace.MyServer()

但实际上你应该像这样从 ptotobuf 为你创建的基础 class 继承:

 public class GrpcImplementationClass: MyNamespace.MyServer.MyServerBase
 {

   public override MyFunction()
   {
   ...
   ...

P.S。 Youtube

上有很多初学者教程