gRPC C# 为生成的.cs文件指定命名空间

gRPC C# Specifying the namespace for the generated .cs files

我已经按照 gRPC C# 教程使用源 .proto 文件生成和使用 .cs 文件。教程示例为 .cs 文件提供了一个命名空间,但是当我尝试我的 .proto 文件时,没有任何命名空间被应用。 .proto 文件是外部控制,所以我无法控制 内容。此外,'csharp-namespace'.

的 .proto 中没有 'options'

我正在使用 (Visual Studio / NuGet + Build) 方法生成这些文件。如何为这些对象指定命名空间?

作为参考,我正在使用这个 .proto file。如您所见,通用命名的 'Devices' 服务在我的项目中引起了一些名称冲突。对于我来说,作为 gRPC 客户端开发人员,就像构建客户端来包装服务一样,您无法控制其命名空间,这对我来说似乎很奇怪。

来自 https://developers.google.com/protocol-buffers/docs/csharptutorial

In C#, your generated classes will be placed in a namespace matching the package name if csharp_namespace is not specified. In our example, the csharp_namespace option has been specified to override the default, so the generated code uses a namespace of Google.Protobuf.Examples.AddressBook instead of Tutorial.

选项csharp_namespace =“Google.Protobuf.Examples.AddressBook”;

您是否尝试将此选项传递给协议?

It would seem odd to me that ... you don't have control over its namespace.

有 3 个选项供您选择。

  1. 您已经知道(但不想做?)的最简单方法就是手动更新文件。完成!
  2. 如果这是一次性的事情,并且无论出于何种原因您不想修改原型文件,请下载代码生成器 from here 和 运行 protoc 针对那些将生成的原型文件C# 类 类似于 Visual Studio Build 所做的。然后,您可以将生成的 C# 文件包含在您的解决方案中。您现在必须从您的项目中删除 proto 文件,或者如果您确实包含它,则将其构建操作设置为 None。
  3. 如果proto文件比较多,而且经常变化,需要加强步骤(2)。您可能希望生成 c# 文件作为 MSBuild 的一部分。你可以在这里做一些花哨的(或者真的过度设计)事情,比如在外部的包中托管原型,MSBuild 将在构建期间下载它。在您可以在 IDE 中打开您的项目之前,需要完成此步骤,否则它会抱怨缺少 C# 文件。 n.b。这些自动生成的文件将成为项目的一部分,但不会签入您的源代码管理。您的 CI 进程将遵循相同的 MSBuild 进程并在构建解决方案之前生成文件。

你懂的。基本上你有很多选择和对命名空间的控制。只是不是开箱即用的。