为什么Google.Pubsub.V1 beta01不适用于dotnet cli项目

本文关键字:适用于 dotnet cli 项目 不适用 beta01 Google Pubsub V1 为什么 | 更新日期: 2023-09-27 17:56:48

我创建了一个非常简单的程序,应该列出Google Cloud项目中可用的主题。代码很简单:

using System;
using Google.Pubsub.V1;
public class Test
{
    static void Main()
    {
        var projectId = "(fill in project ID here...)";
        var projectName = PublisherClient.FormatProjectName(projectId);
        var client = PublisherClient.Create();
        foreach (var topic in client.ListTopics(projectName))
        {
            Console.WriteLine(topic.Name);
        }
    }    
}

当我从面向 .NET 4.5 的"常规"msbuild 项目运行它时,它工作正常。当我尝试将 dotnet cli (1.0.0-preview2-003121) 与以下project.json文件一起使用时:

{
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Google.Pubsub.V1": "1.0.0-beta01"
  },
  "frameworks": {
    "net45": { }
  }
}

。我看到一个例外:

Unhandled Exception: System.IO.FileNotFoundException: Error loading native library.
Not found in any of the possible locations c:'[...]'Pubsub.Demo'bin'Debug'net45'win7-x64'nativelibs'windows_x64'grpc_csharp_ext.dll
   at Grpc.Core.Internal.UnmanagedLibrary.FirstValidLibraryPath(String[] libraryPathAlternatives)
   at Grpc.Core.Internal.UnmanagedLibrary..ctor(String[] libraryPathAlternatives)
   at ...

我不是在尝试以 .NET Core 为目标,所以不应该支持它吗?

为什么Google.Pubsub.V1 beta01不适用于dotnet cli项目

这目前是 gRPC 0.15 中的一个限制,Google.Pubsub.V1 将其用作其 RPC 传输。在 msbuild 下,Grpc.Core包中的build/net45/Grpc.Core.targets文件将所有本机二进制文件复制到适当的位置。在 DNX 下,未复制包,gRPC 尝试在本地包存储库的正确位置查找文件。在 dotnet cli 下,我们需要使用包中的"运行时"根目录来托管库。

我们已经在 gRPC 中对此进行了修复,但我们未能将其放入 beta-01 版本中。我们希望在 beta-02 中修复它。

只需

手动复制文件即可解决此问题:

mkdir bin'Debug'net45'win7-x64'nativelibs'windows_x64
copy 'users'jon'.dnx'packages'Grpc.Core'0.15.0'build'native'bin'windows_x64'grpc_csharp_ext.dll bin'Debug'net45'win7-x64'nativelibs'windows_x64

。但这显然是相当繁琐的。我建议只使用 msbuild,直到基本问题得到解决。