.net core dotnetcore创建协议消息公共库
用例非常简单: 我有两个项目(ProtoProvider和ProtoConsumer)。 ProtoProvider有proto文件(to_import.proto)和我想在ProtoConsumer上使用的消息。.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
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包
- 在消费代码的包引用中,使用
生成一个保存nuget包内容路径的变量GeneratePathProperty
- 在消费代码的
中,使用Protobuf Include
包含nuget包中的公共protoAdditionalImportDirs
proto
文件。声明消息并编译为本机代码。您导入的本机代码。我不理解您搜索的是“已知”类型。所以,在构建时,您没有得到文件未找到错误?我正在用错误信息更新原始帖子,我没有使用C#,但我现在知道了。您是否检查了导入语法以确保其正确性(包名称等)?您的csharp命名空间不包含“common”。这就是我感兴趣的内容,即如何正确导入。我尝试了包+原型文件名、包+类名、命名空间+原型文件名和命名空间+类名的许多不同组合。所有这些都会导致文件未找到错误。如果C#环境与Java环境类似,则csharp_命名空间
应该是完全限定路径名的前缀/路径/目录,而不是ProtoConsumer
。你看到这个了吗?