C# .NET 5:找不到导入或存在错误
从著名的介绍性示例()派生的简单场景。为了使C# .NET 5:找不到导入或存在错误,c#,visual-studio-2019,grpc,.net-5,C#,Visual Studio 2019,Grpc,.net 5,从著名的介绍性示例()派生的简单场景。为了使HelloRequest消息可重用,我在另一个文件–request.proto中提取了它。该文件与原始文件greet.proto位于同一文件夹中(请参见最后的图片) 我需要使HelloRequest(在request.proto中)为迎宾服务(在greet.proto中)所知。在greet.proto中导入它的所有尝试都失败,并显示消息 ... 1>Protos/greet.proto(7,1): error : Import "req
HelloRequest
消息可重用,我在另一个文件–request.proto中提取了它。该文件与原始文件greet.proto位于同一文件夹中(请参见最后的图片)
我需要使HelloRequest
(在request.proto中)为迎宾服务(在greet.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;
}
package common;
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
以下是解决方案资源管理器显示的内容:
正如我所料,答案和问题一样简单–这只是一个幸运的猜测–导入应该如下所示
import "protos/request.proto";
显然protobuf编译器“认为”它在项目的根文件夹中运行。这是有道理的
还有一个注意事项–如果导入的文件定义了一个新的包名称,则该名称应以消息名称为前缀,如下所示:
request.proto:
syntax = "proto3";
package greeter; // needles to say this was commented out in all my attempts
message HelloRequest {
string name = 1;
}
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中(重新)使用?
我对此没有答案——太多了(
如果有人知道,请把它贴在这里。我很乐意投赞成票。正如我所料,答案和问题一样简单—这只是一个幸运的猜测!——导入应该是这样的
import "protos/request.proto";
显然protobuf编译器“认为”它在项目的根文件夹中运行。这是有道理的
还有一个注意事项–如果导入的文件定义了一个新的包名称,则该名称应以消息名称为前缀,如下所示:
request.proto:
syntax = "proto3";
package greeter; // needles to say this was commented out in all my attempts
message HelloRequest {
string name = 1;
}
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中(重新)使用?
我对此没有答案——太多了(
如果有人知道,请把它贴在这里。我很乐意投赞成票