Подтвердить что ты не робот

Почему Google.Pubsub.V1 beta01 не работает с проектами dotnet cli?

Я создал очень простую программу, которая должна отображать темы, доступные в проекте 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);
        }
    }    
}

Когда я запускаю это из "обычного" проекта msbuild, ориентированного на .NET 4.5, он отлично работает. Когда я пытаюсь использовать 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, поэтому не следует ли это поддерживать?

4b9b3361

Ответ 1

В настоящее время это ограничение в gRPC 0.15, которое Google.Pubsub.V1 использует в качестве транспорта RPC. В msbuild файл build/net45/Grpc.Core.targets в пакете Grpc.Core копирует все исходные двоичные файлы на место. В DNX пакеты не были скопированы, и gRPC пытается найти файл в нужном месте в локальном репозитории пакетов. В dotnet cli нам нужно использовать корневой каталог "runtimes" в пакете для размещения библиотек.

Мы внедрили исправление для этого в gRPC, но нам не удалось попасть в бета-версию 01. Мы надеемся исправить это для бета-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 до тех пор, пока основная проблема не будет исправлена.