【问题标题】:.NET 5: Import was not found or had errors.NET 5:未找到导入或有错误
【发布时间】:2021-01-23 19:15:21
【问题描述】:

源自著名的介绍性示例 (https://docs.microsoft.com/en-us/aspnet/core/tutorials/grpc/grpc-start?view=aspnetcore-3.1&tabs=visual-studio) 的简单场景。为了使HelloRequest 消息可重复使用,我将其提取到另一个文件中——request.proto。该文件与原始 greet.proto 位于同一文件夹中(见最后的图片)。

我需要让Greeter 服务(在greet.proto 中)知道HelloRequest(在request.proto 中)。所有在 greet.proto 中导入它的尝试都失败并显示消息

...
1>Protos/greet.proto(7,1): error : Import "request.proto" was not found or had errors.
...

这里是 greet.proto

syntax = "proto3";

option csharp_namespace = "GrpcService1";

package greeter;

import "request.proto";
//import "Protos/request.proto";
//import "GrpcService1/Protos/request.proto";
// all other combinations I may have thought off...

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
/*message HelloRequest {
  string name = 1;
}*/

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

和 request.proto:

syntax = "proto3";

package greeter;  // needles to say this was commented out in all my attempts

message HelloRequest {
  string name = 1;
}

解决方案资源管理器显示如下:

【问题讨论】:

    标签: c# visual-studio-2019 grpc .net-5


    【解决方案1】:

    正如我所料,答案和问题一样简单——这只是一个幸运的猜测!——导入应该是这样的

    import "protos/request.proto";
    

    显然 protobuf 编译器“认为”它在项目的根文件夹中运行。这是有道理的。

    还有一点需要注意——如果导入的文件定义了一个新的包名,这个名字应该在消息名之前加上前缀,像这样:

    request.proto:

    package common;
    
    // The request message containing the user's name.
    message HelloRequest {
      string name = 1;
    }
    

    并在 greet.proto 中使用它:

    package greet;
    
    import "protos/request.proto";
    
    // The greeting service definition.
    service Greeter {
      // Sends a greeting
      rpc SayHello (common.HelloRequest) returns (HelloReply);
    }
    

    注意common.HelloRequest中的common

    这个简单的观察引出了一个更普遍的问题(而且可能是一个更重要的问题)。

    如何导入在另一个项目中定义的 protos,比如 CustomTypes.csproj,以便在许多 gRPC protobuf IDL 中(重新)使用?

    对此我没有答案——太多的 Unix... :(

    如果有人知道,请在此处发布。我很乐意为它投票。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2020-08-05
      • 1970-01-01
      • 2014-10-30
      相关资源
      最近更新 更多