C# 我可以用Protobuf net控制生成类的可见性吗?

C# 我可以用Protobuf net控制生成类的可见性吗?,c#,protocol-buffers,protobuf-net,C#,Protocol Buffers,Protobuf Net,我正在使用(谢谢Marc:)序列化我的对象模型,但是我希望对象模型在我的程序集之外不可见(特别是,我希望它是内部的) 默认情况下,protobuf net似乎生成公共分部类。我可以告诉它标记类内部 这是我的.proto文件的精简版本: package MyProject.Core.Persistence; option optimize_for = SPEED; message DataObject { required string name = 1; required int32

我正在使用(谢谢Marc:)序列化我的对象模型,但是我希望对象模型在我的程序集之外不可见(特别是,我希望它是内部的)

默认情况下,protobuf net似乎生成公共分部类。我可以告诉它标记类
内部

这是我的
.proto
文件的精简版本:

package MyProject.Core.Persistence;

option optimize_for = SPEED;

message DataObject {
  required string name = 1;
  required int32 id = 2;
}
这将生成以下类定义:

[global::System.Serializable,
   global::ProtoBuf.ProtoContract(Name=@"DataObject")]
public partial class DataObject : global::ProtoBuf.IExtensible
{
  public DataObject () {}

  ...
}

现在不行;但是,您可以编辑
csharp.xslt
以满足自己的需要

这似乎不是常见的情况,但可以很容易地将其添加为一个选项。

解决方案: 您可以在消息定义之前添加以下两行

import "protobuf-net/protogen.proto";
option (.protobuf_net.fileopt).access = INTERNAL;
完整示例代码: 参考: mgravell中消息访问的定义

package MyProject.Core.Persistence;

import "protobuf-net/protogen.proto";
option (.protobuf_net.fileopt).access = INTERNAL;

option optimize_for = SPEED;

message DataObject {
  required string name = 1;
  required int32 id = 2;
}
enum Access {
    option (.protobuf_net.enumopt) = {
       access: PUBLIC
    };
    INHERIT = 0;
    PUBLIC = 1;
    PRIVATE = 2;
    INTERNAL = 3;
}