1

由于某种原因,生成的代码包含内部构造函数而不是公共构造函数:

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    internal MyProtobufMessage()
    {
        OnConstruction();
    }

官方文档来看,它应该是公开的:

  // Parameterless constructor which calls the OnConstruction partial method if provided.
  public Foo();

我想知道是否可以指定任何选项来生成公共构造函数。我需要它是公共的,因为我使用的是通用模板,它要求类型具有公共构造函数(new() 约束)。

我正在使用的 Protobuf 版本:3.11.4

.proto 文件是这样的:

syntax = "proto3";
import "timestamp.proto";

package MyNamespace;
option csharp_namespace = "MyNamespace";

message MyProtobufMessage{
   ...
}
4

1 回答 1

0

可以选择将整个消息类设为内部,但 AFAIK 应该始终有一个公共的无参数构造函数。

你知道你的.protos文件是如何被编译的吗?

注意代码生成是由一个单独的包完成的Google.Protobuf.tools——你应该检查这个包也在 3.11.4 (并且你的 .proto 编译正在选择最新版本protoc)。

编译过程应该是类似如下的命令: C:\Users\Me\.nuget\packages\Google.Protobuf.tools\3.11.4\tools\windows_x64\protoc.exe .\test.proto --csharp_out .\

于 2021-03-22T11:07:18.860 回答