Ich verwende protobuf-net , und ich versuche Folgendes:
Das ist ziemlich einfach mit:
protogen.exe
tool Serializer<T>.GetProto()
Methode Aber die Sache ist, dass ich protaBuffer benutzerdefinierte Optionen unterstützen muss und es nicht tut Es scheint so einfach zu sein wie ich.
Lass es mich erklären:
Grundsätzlich gegeben:
%Vor%Ich möchte generieren:
%Vor%... und umgekehrt.
Anmerkungen:
my_message_option
und
my_field_option
) kann bereits existieren
in einem Protofile (sagen wir,
my_custom_options.proto) und der
benutzerdefinierte Attribute Klassen können auch
irgendwo existieren
( MyMessageOptionAttribute
und
MyFieldOptionAttribute
). Was ist der bevorzugte Weg, um das zu erreichen? Die Lösung muss sich nicht auf protobuf-net verlassen.
Am Ende gab ich das ProtoGen-Projekt von protobuf-csharp ab, um einige interne Typen zu veröffentlichen ( Generatoren, in den meisten Fällen) und um die SourceGenerators
erweiterbar zu machen, indem benutzerdefinierte Generatorregistrierungen zugelassen werden.
Auf diese Weise konnte ich das Proto-Deskriptor-Objektmodell verwenden, um meinen eigenen C # -Generator zu schreiben.
Ein kniffliger Punkt ist, Ihre benutzerdefinierten Optionen zu registrieren, bevor Sie das Parsing starten:
Protoc.exe
dann ProtoGen.exe
) ExtensionRegistry
mithilfe der generierten RegisterAllExtensions
Methoden. Descriptor.Options
-Auflistung zugreifen. Im Moment gibt es dafür keine einfache Möglichkeit. Die erforderlichen Änderungen würden hauptsächlich in der Datei csharp.xslt vorgenommen. Es gibt einen Fehler , der darüber berichtet wurde, aber noch nicht behoben wurde.
Tags und Links c# code-generation protocol-buffers protobuf-net