Использование импорта в прото-файл с Visual Studio/Rider

Я получаю сообщение об ошибке «Файл не найден» при использовании импорта в файле .proto. Я использую Rider, но у меня такая же проблема при использовании Visual Studio.

Первый протофайл:

syntax = "proto3";

import "/fileToImport.proto";

service GreeterAPI {
  rpc SayHello (SayHelloRequest) returns (SayHelloResponse);
}

message SayHelloRequest {
  string name = 1;
}

message SayHelloResponse {
  string answer = 1;
}

Второй протофайл, который я хочу импортировать:

syntax = "proto3";

message Foo {
  string bar = 1;
}

Оба файла расположены рядом друг с другом в каталоге проекта.

Файл .csprjo:

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Google.Protobuf" Version="3.10.1" />
      <PackageReference Include="Grpc.Core" Version="2.25.0" />
      <PackageReference Include="Grpc.Tools" Version="2.25.0" />

      <Protobuf Include="**/*.proto" />
    </ItemGroup>

</Project>

Если я создам проект без строки импорта, все в порядке. Но со строкой импорта я получаю «Файл не найден»

Я знаю, что могу использовать --proto_path, чтобы сообщить протоколу все файлы. Но я не хочу создавать дополнительный сценарий предварительной сборки или что-то в этом роде. Я хочу использовать сборку в поддержку IDE.


person Patrick    schedule 15.11.2019    source источник
comment
Похоже, вы указали абсолютный путь, можете попробовать относительный: 'import fileToImport.proto; '   -  person Luc    schedule 20.11.2019


Ответы (1)


У меня была та же проблема, что и у вас, исправление, которое сработало для меня, заключалось в добавлении папки, содержащей файлы .proto, к импорту. Предполагая, что оба файла .proto находятся в папке «Protos», попробуйте изменить

import "/fileToImport.proto"; to import "Protos/fileToImport.proto".

Также попробуйте изменить файл .csproj с

<Protobuf Include="**/*.proto" />

to

<ItemGroup> <Protobuf Include="Protos/includingFile.proto" Link="includingFile.proto"/> <Protobuf Include="Protos/fileToInclude.proto" Link="fileToInclude.proto"/> </ItemGroup>

надеюсь, это поможет

person Alex.C.    schedule 19.12.2019