Как я могу использовать относительные пути в операторе импорта файла прото? - PullRequest
1 голос
/ 26 января 2012

Я использую пользовательский инструмент ProtoBufTool для protobuf-net для генерации классов C # из файлов .proto. До сих пор я не смог заставить оператор import в файлах прототипа работать с относительными путями. Вот моя ситуация:

У меня в проекте есть 2 прото-файла, расположенных следующим образом:

directory layout

User.proto:

package Models;

message User {
    required int32 ID = 1;
    required string Username = 2;
    // etc...
}

UserSearch.proto:

package Models.Messages;

import "../User.proto";

message UserSearchRequest {
    optional string Query = 1;
    optional int32 Limit = 2;
    optional int32 Offset = 3;
}

message UserSearchResult {
    required int32 NumResults = 1;
    required int32 NumReturned = 2;
    repeated User Users = 3;
}

Файл User.cs генерируется нормально, но в файле UserSearch происходит сбой. Это то, что я вижу в окне списка ошибок.

  • Ошибка пользовательского инструмента: ../User.proto: файл не найден.
  • Ошибка пользовательского инструмента: UserSearch.proto: импорт "../User.proto" не найден или имел ошибки.
  • Ошибка пользовательского инструмента: UserSearch.proto: 22: 18: «Пользователь» не определен.

Для записи я попытался использовать \\ вместо / и получаю тот же результат. Кроме того, оператор импорта работает нормально, если оба файла прото-файлов находятся в одном каталоге, и я удаляю ../, но я не хочу, чтобы мои файлы располагались.

Как мне получить относительные пути для работы в операторе импорта?

1 Ответ

3 голосов
/ 26 января 2012

Краткий ответ - у меня должна быть ошибка с инструментарием и путями, которые он использует при разговоре с protoc (парсер Google .proto).Мне придется посмотреть на это и исправить.

Более неловкий ответ; если вы не возражаете против использования инструментов командной строки, вы можете использовать проток google для компиляции .proto в двоичный файл, используя --descriptor_set_out={file}, используя любые опции --proto_path, которые вы выберете (пока это чистоИнструменты Google);затем вы можете передать этот скомпилированный набор дескрипторов в protogen в качестве входных данных (он обрабатывает любой формат).

Это было бы нормально для сборки по сценарию, но вы не захотите делать это вручную!Я постараюсь посмотреть, что не так с инструментами.Добавлено в список.

...