Вывести один класс C# на файл с протогеном?

Возможно ли, чтобы протоген выводил несколько файлов (по одному на класс) на основе одного файла.proto?

Я работаю с очень большим.proto файлом, который выводит около 200 классов, в настоящее время все в одном файле. Одно из мест, где мне нужно использовать сгенерированные классы, - это среда с ограниченным объемом памяти (фоновый агент Windows Phone).

Я хотел бы иметь возможность включать только необходимые классы в сборку, загруженную в ограниченную среду, но не могу легко сделать это, когда все сгенерированные классы находятся в одном файле. Если бы я мог выводить их в несколько файлов, я мог бы ссылаться только на те, которые мне нужны в сборке для ограниченной среды.

Есть ли способ, чтобы протоген выводил классы в отдельных файлах? Я не вижу возможности для этого и в настоящее время использую только umbrella-classname вариант.

Редактирование сгенерированного файла вручную невозможно, поэтому, если protogen не может этого сделать, есть ли другой инструмент командной строки, который может разделить файл, содержащий несколько классов? (Для экономии изобретать велосипед.)

Обновить
я использую Google.ProtocolBuffers.dll унаследованное решение и не легко изменить.
Редактирование / разделение файла.proto также не возможно. (Если только не пользовательский шаг.)

1 ответ

У нас есть опция для этого в csharp_options, но она не реализована:

// Whether to generate a single file for everything within the
// .proto file (false), or one file per message (true).
// This option is not currently honored; please log a feature
// request if you really want it.
optional bool multiple_files = 4;

Учитывая, что вам нужно удалить соответствующие файлы и убедиться, что все зависимости правильно настроены, это звучит так, как будто это на самом деле не спасет вас от работы над решением, которое я бы предложил, а именно разделить ваш файл протока на отдельные. Скажите, что это "тоже не возможно", но в основном это все, что я могу предложить на данный момент - почему это не возможно?

РЕДАКТИРОВАТЬ: у меня только что была другая идея. Вы могли бы потенциально запустить protoc шаг protogen (что теперь делается автоматически, если не указано иное) для анализа .proto файл в свой дескриптор. Затем загрузите дескриптор в другую программу, измените его, как и любое другое сообщение protobuf (создайте из него конструктор, отредактируйте сообщение, соберите), а затем сохраните дескриптор. Затем вы можете использовать protogen в оставшемся дескрипторе и генерировать только те классы, которые вам нужны...

Другие вопросы по тегам