Protobuf не работает - Jetbrains Rider. NET Core 3.1 - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь сделать простой учебник gRP C. Сначала я начал с Jetbrains Rider, создав новую службу gRP C, затем я создал консольное приложение для клиента и установил:

Google.Protobuf - 3.11.4
Grpc.Net.Client - 2.28.0-pre2
Grpc.Tools - 2.28.0-pre3

Это не похоже на сгенерированный код для greet.proto генерируется, когда я получаю красные волнистые лилии var client = new Greeter.GreeterClient(channel);

Однако, когда я открываю проект в Visual Studio, кажется, что все работает. Я пропустил плагин или что-то здесь?

Мой csproj

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

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
      <PackageReference Include="Google.Protobuf" Version="3.11.4" />
      <PackageReference Include="Grpc.Net.Client" Version="2.28.0-pre2" />
      <PackageReference Include="Grpc.Tools" Version="2.28.0-pre3" />
    </ItemGroup>

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto">
        <GrpcServices>Client</GrpcServices>
        <OutputDir>obj\Debug\netcoreapp3.1\</OutputDir>
        <Access>Public</Access>
        <ProtoCompile>True</ProtoCompile>
        <ProtoRoot></ProtoRoot>
        <CompileOutputs>True</CompileOutputs>
        <Generator>MSBuild:Compile</Generator>
      </Protobuf>
    </ItemGroup>

</Project>

1 Ответ

0 голосов
/ 30 марта 2020

, если он компилируется в Rider (скомпилированные файлы должны находиться в папке obj/Debug/[your-netcore-target]/), то у вас все правильно настроено и работает (= он компилируется). «Только» Rider не может найти скомпилированные классы (протестировано в Rider 2019.3.4 build 193.6494.48).

Кажется, это ошибка (см. https://youtrack.jetbrains.com/issue/RIDER-25412 или https://youtrack.jetbrains.com/issue/RIDER-39721) в Rider, что вызвано смешением версий NuGet.

Убедитесь, что во всех других проектах вашего решения используются те же версии библиотек, связанных с gRP C.

Мне удалось установить его с помощью следующих версий (с таргетингом на netcoreapp3.0):

Приложение My Server:

<PackageReference Include="Grpc.AspNetCore" Version="2.27.0" />

Моё клиентское приложение

<PackageReference Include="Google.Protobuf" Version="3.11.2" />
<PackageReference Include="Grpc.Net.Client" Version="2.25.0" />
<PackageReference Include="Grpc.Tools" Version="2.27.0">
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  <PrivateAssets>all</PrivateAssets>
</PackageReference>

Остерегайтесь , что Grp c .AspNetCore в версии 2.27.0 содержит ссылки на Google.Protobuf 3.11.2 и Grp c .Tools 2.27.0. Поэтому я не могу использовать разные версии в моем клиентском проекте. Или я могу, он скомпилируется, но Rider не найдет файлы.

Проще говоря, убедитесь, что все связанные с gRP C нуги в всех проектах в вашем решении используют точно так же версия, , включая ссылки nugets (ссылки на которые используются явным образом),

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

...