我试图在.NET Core项目中使用Thrift,但由于某种原因,Thrift编译器生成的C#代码不起作用。
我创建了一个非常简单的.thrift文件用作测试,如下所示:
namespace netcore Management
service ManagementService {
void Ping()
}
我把它放在一个空的类库中(我的其他项目将依赖它),并将以下代码添加到我的.csproj文件中进行编译:
<Target Name="PreBuild" BeforeTargets="_GenerateRestoreProjectSpec;Restore;Compile">
<Exec Condition="'$(OS)' == 'Windows_NT'" Command="where thrift" ConsoleToMSBuild="true">
<Output TaskParameter="ConsoleOutput" PropertyName="PathToThrift" />
</Exec>
<Exec Condition="Exists('$(PathToThrift)')" Command="$(PathToThrift) -out $(ProjectDir) -gen netcore:wcf,union,serial,hashcode -r management.thrift" />
</Target>
这似乎工作正常,我的项目中创建了一个包含自动生成代码的ManagementService.cs文件。
但是,这个自动生成的代码无法编译!当我尝试时,MSBuild会抛出这些错误:
无法找到类型或命名空间名称“Ping_args”(您是否缺少using指令或程序集引用?)
找不到类型或命名空间名称'Ping_result'(您是否缺少using指令或程序集引用?)
自己查看代码,确实看起来确实没有在任何地方声明这两个变量。谁能告诉我为什么会这样?我的.thrift文件有问题吗?
答案 0 :(得分:1)
似乎由同时拥有union
和hashcode
引起。类型为-gen netcore:wcf,union,serial,hashcode
时,as Ping_args
正在生成PingArgs
。
删除其中任何一个都摆脱了该强制转换。