我正在创建一个简单的 C# 桌面应用程序,该应用程序从 Google Cloud PubSub 提取消息。我注意到 PubSub 使用 Grpc.Core 包,安装后大小超过 500 mb!它包含许多我不需要的文件(对于 mac、android 等),如果我的应用程序大小只有几 MB,那么使用这样的包似乎不合理。这里有一个讨论: Why is Grpc.Core NuGet package so big?
在评论部分据说可以针对更具体的包来满足特定的需求。所以我的问题是 - 是否有更具体的包可用于简单地将消息从 Cloud PubSub 提取到桌面应用程序?
最佳答案
我感受到你的痛苦。 (事实上,我多次感受到了这一点。当我对我所从事的 google-cloud-dotnet repo 进行完整构建时,它会多次引入这些库,最终变得庞大。)
如果您可以添加一种“负依赖”来表示“我不想要 Grpc.Core,即使 Google.Cloud.PubSub.V1 间接依赖于它,那就太好了”请改用 Grpc.Net.Client”,但我不认为在 MSBuild 项目中有任何简单的方法可以做到这一点。
我们确实“尽力”尝试通过 Google.Api.Gax.Grpc.GrpcNetClient 包支持 Grpc.Net.Client - 您可以依赖该包,然后设置 GrpcAdapter
属性(property) ClientBuilderBase<TClient>
至GrpcNetClientAdapter.Default
。但是:
- 由于手动代码层包装了生成的代码,Pub/Sub 库的重新配置比其他库稍微复杂一些。 (如果您有兴趣,我可以研究如何执行该配置。)
- 我们尚未对 Grpc.Net.Client 进行重要测试,尤其是 Pub/Sub 库执行大量流处理;虽然它应该都能正常工作,但也可能会出现问题。
- 这样做实际上并不会删除 Grpc.Core 依赖项 - 因此您需要手动删除不需要的文件。
确实没有更具体的软件包可供您定位 - 我只能建议您删除不需要的文件。例如,您可以在运行后编译的构建目标中执行此操作。 可能有一些狡猾的方法来告诉 MSBuild,当它将复制(比如说)iOS 库到特定位置时,只需排除它们 - 但我不这样做足够了解 MSBuild 来说明您将如何做到这一点(当它们由于依赖项而不是由于项目本身而被复制时)。
关于c# - 我真的需要整个 Grpc.Core NuGet 包才能在简单的 C# 应用程序中使用 Google PubSub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63249450/