我有一些.proto文件,用于编译Java,C
和C#中的类。对于Java和C
,我使用Protoc编译器,对于C#,我使用Protogen。用于创建Java / C ++类的脚本是
@ECHO OFF
SET SRC_DIR=%~dp0
REM Make Java and C++
SET JAVA_OUT_DIR=%SRC_DIR%\..\taurus-messages-java\src\main\java
if not exist %JAVA_OUT_DIR% (
mkdir %JAVA_OUT_DIR%
)
SET CPP_OUT_DIR=%SRC_DIR%\..\taurus-messages-cpp
if not exist %CPP_OUT_DIR% (
mkdir %CPP_OUT_DIR%
)
protoc -I=%SRC_DIR% --java_out=%JAVA_OUT_DIR% --cpp_out=%CPP_OUT_DIR% %SRC_DIR%taurus-mux.proto
protoc -I=%SRC_DIR% --java_out=%JAVA_OUT_DIR% --cpp_out=%CPP_OUT_DIR% %SRC_DIR%taurus-backtest.proto
对于C#类,我有
@ECHO OFF
SET WORK_DIR=%~dp0
SET OUT_DIR=%WORK_DIR%\Messages
SET SRC_DIR=%WORK_DIR%\..\..\..\Taurus\trunk\taurus-messages-proto\
if not exist %OUT_DIR% (
mkdir %OUT_DIR%
)
cd %SRC_DIR%
protogen -p:detectMissing -i:taurus-backtest.proto -o:%OUT_DIR%\TaurusBacktest.cs
protogen -p:detectMissing -i:taurus-mux.proto -o:%OUT_DIR%\TaurusMux.cs
cd %WORK_DIR%
这两个脚本都引用.proto文件(当然是;])。我添加了上面的C#脚本-p:detectMissing
,以生成允许我测试是否指定了字段的属性;该选项*Specified
将为其中的所有字段创建IsRequired = false
。
我的问题很简单,我想确保C#,C
++和Java类保持对齐,但是对于C#,我需要在-p:detectMissing
Protogen中使用option,使用Protoc的等效选项是什么?
谢谢你的时间。
如果我正确理解了这个问题,那么实际上没有“等效”选项-它们是具有不同预期用途的不同工具。如果您的主要驱动程序是按需使用的,则可能需要查看protobuf-
csharp-port,它在移至C#时仍保持非常相似的用法。相比之下,protobuf-net并没有尝试提供与google相同的API-
它充当惯用的.NET序列化程序,碰巧以protobuf格式讲话。
所以我试着在https://grpc.io/docs/tutorials/basic/java.html#generating-客户端和服务器代码,但我在使用grpc插件和protoc编译器进行编译时遇到问题。我已经设置了pom。xml与插件(我认为)正确结合,但编译器不会生成指南所需的文件(即RouteGuideGrpc.java)。 我目前正在编译。使用“mvn protobuf:编译”的pr
词法分析器 语法分析器 语义分析及中间代码生成 代码优化 代码生成
那么,让我看看我是否明白了这一点。 > 当我们说编译器和解释器之间的区别时,解释器将高级指令翻译成中间形式,然后执行。[我认为编译器也将高级指令翻译成中间形式,但此刻它生成目标代码而不是执行它,对吗?] 解释器一次读取一条指令或一行的源代码,将该行转换为机器代码并执行它。[解释器本身不会将代码转换为机器代码,它会使用ist自己的预编译函数评估指令(在解析之后)。例如,高级语言中的Add表达式将使用
我创建了一个简单的. proto文件并执行了编译器(protoc-2.5.0rc1-win32.zip)。为规定的包生成了一个java文件。但是,生成的文件不会编译。. proto文件很简单,只有一条消息,其中包含一堆简单类型的可选字段(正确编号)。. java文件不编译,例如: 构造函数生成了消息。FieldAccessorTable(Descriptors.Descriptor,字符串[])未
由于IntelliJ,我发现需要将以下选项传递给:
编译器架构