.NET Core中的节俭 - 生成的C#代码无法编译

时间:2018-04-18 21:50:02

标签: c# .net-core thrift

我试图在.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文件有问题吗?

1 个答案:

答案 0 :(得分:1)

似乎由同时拥有unionhashcode引起。类型为-gen netcore:wcf,union,serial,hashcode时,as Ping_args正在生成PingArgs

删除其中任何一个都摆脱了该强制转换。