.net core dotnetcore创建协议消息公共库

.net core dotnetcore创建协议消息公共库,.net-core,grpc,proto,google-protocol-buffer,.net Core,Grpc,Proto,Google Protocol Buffer,用例非常简单: 我有两个项目(ProtoProvider和ProtoConsumer)。 ProtoProvider有proto文件(to_import.proto)和我想在ProtoConsumer上使用的消息。 ProtoConsumer在ProtoProvider上有引用,并尝试在imported.proto中使用ProviderMessage。 我无法使用该消息,因为我在import上获得了“File not found.”,并且在imported.proto的编译器上获得了“Prov

用例非常简单: 我有两个项目(ProtoProvider和ProtoConsumer)。

ProtoProvider有proto文件(to_import.proto)和我想在ProtoConsumer上使用的消息。
ProtoConsumer在ProtoProvider上有引用,并尝试在imported.proto中使用ProviderMessage。 我无法使用该消息,因为我在import上获得了“File not found.”,并且在imported.proto的编译器上获得了“ProvidedMessage is not defined”。
编辑2>>> 为了澄清,我想创建一个类似于google的google.protobuf.Timestamp的消息,并将其分发到另一个或多个没有其他项目的项目,同时让项目/项目(消费者)从dll获取消息。问题的全部前提是如何通过dll在另一个项目中使用to_import.proto中定义的消息(将其视为common.grpc lib)


EDIT1>> 我收到的错误消息

是否有一种解决方案允许从项目引用导入原型文件? 我正在寻找一些类似谷歌的解决方案为知名的类型

import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";
资料来源:。
(复制原型文件或移动文件不是一个优雅的解决方案)

下面我将提供.csproj文件

原始提供者:

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

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

  <ItemGroup>
    <None Remove="to_import.proto" />
  </ItemGroup>

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

  <ItemGroup>
    <Protobuf Include="to_import.proto" GrpcServices="None" />
  </ItemGroup>

</Project>

netcoreapp3.1
原消费者:

    <Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Protobuf Include="Protos\imported.proto" />
  </ItemGroup>

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

  <ItemGroup>
    <ProjectReference Include="..\ProtoProvider\ProtoProvider.csproj" />
  </ItemGroup>
</Project>

netcoreapp3.1
编辑>>3
一些背景:这个问题的目的是帮助我理解一种更清晰的方法,即一次(按规定)实现decimal并在每个项目中重用它们。

AFAIK,编译
proto
文件需要磁盘上存在所有文件(包括导入)

这对已知类型的工作方式是将它们包含在中

因此,不可能提供一个实现您想要的功能的类库

对相关问题的讨论建议结合使用:

  • 构建包含公共proto和关联类库的nuget包
  • 在消费代码的包引用中,使用
    GeneratePathProperty
    生成一个保存nuget包内容路径的变量
  • 在消费代码的
    Protobuf Include
    中,使用
    AdditionalImportDirs
    包含nuget包中的公共proto

我不明白你的问题。提供者和使用者可以使用相同的
proto
文件。声明消息并编译为本机代码。您导入的本机代码。我不理解您搜索的是“已知”类型。所以,在构建时,您没有得到文件未找到错误?我正在用错误信息更新原始帖子,我没有使用C#,但我现在知道了。您是否检查了导入语法以确保其正确性(包名称等)?您的csharp命名空间不包含“common”。这就是我感兴趣的内容,即如何正确导入。我尝试了包+原型文件名、包+类名、命名空间+原型文件名和命名空间+类名的许多不同组合。所有这些都会导致文件未找到错误。如果C#环境与Java环境类似,则
csharp_命名空间
应该是完全限定路径名的前缀/路径/目录,而不是
ProtoConsumer
。你看到这个了吗?