У меня был тот же тип ошибки в C #, и здесь была моя проблема: я вызвал protoc
на этапе предварительной сборки в моем проекте.Там я использовал встроенные макросы Visual Studio, такие как $(SolutionDir)
и $(ProjectDir)
, чтобы получить необходимые пути.Поскольку я ссылался на *.proto
файлы из других проектов, я использовал две опции --proto_path
: одну для корневого пути (для разрешения import
путей) и одну для самого файла.Мой файл решения находился в подкаталоге корневого каталога, поэтому я использовал относительный путь ..
, чтобы добраться до корня.Прото-файлы всегда находятся в подкаталоге gen
конкретного проекта.В общем, команда была такой:
protoc.exe --proto_path=$(SolutionDir).. --proto_path=$(ProjectDir)gen $(ProjectDir)gen\DemoFile.proto
Она скомпилировалась нормально, но я получил System.TypeInitializationException
во время выполнения при вызове метода CreateBuilder()
.Проблема заключалась в том, что оба пути $(SolutionDir)..
и $(ProjectDir)
(хотя они фактически указывают на один и тот же каталог) имели различное текстовое представление из-за относительного компонента пути ..
.Я решил проблему, последовательно используя один и тот же путь:
protoc.exe --proto_path=$(SolutionDir).. $(SolutionDir)..\My\Demo\Project\Directory\gen\DemoFile.proto
Мне потребовалось почти 3 дня, чтобы сузить и распознать проблему, поэтому я поделюсь своим решением здесь в надежде, что это сэкономит времядля кого-то.