2016-07-13 6 views
17

Google Cloud 프로젝트에서 사용할 수있는 주제를 나열해야하는 매우 간단한 프로그램을 만들었습니다. 이 코드는 간단합니다 :Google.Pubsub.V1 beta01이 dotnet cli 프로젝트에서 작동하지 않는 이유는 무엇입니까?

"regular"msbuild 프로젝트에서 .NET 4.5를 실행할 때 제대로 작동합니다. 나는 다음과 같은 project.json 파일 DOTNET의 CLI (1.0.0-preview2-003121)를 사용하려고하면 :

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 ... 

내가하려고 아니에요 :

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

... 나는 예외를 참조 .NET 코어를 대상으로하므로 지원되지 않아야합니까?

+2

(이 질문을하는 주된 이유는 구글 클라우드 닷넷 클라이언트 고객을위한 핵심 태그 인'google-cloud-dotnet' 태그를 만드는 것이 었습니다.) 어쨌든 자연스럽게 나타날 수있는 것 ...) –

답변

14

현재 Google.Pubsub.V1이 RPC 전송으로 사용하는 gRPC 0.15의 제한 사항입니다. msbuild에서 Grpc.Core 패키지의 build/net45/Grpc.Core.targets 파일은 모든 원시 바이너리를 복사합니다. DNX에서 패키지는 복사되지 않았고 gRPC는 로컬 패키지 저장소를 사용하여 올바른 위치에서 파일을 찾습니다. dotnet cli에서 패키지를 호스팅 할 때 "runtimes"루트 디렉토리를 사용해야합니다.

우리는 implemented a fix for this in gRPC 이었지만 베타 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를 사용하는 것이 좋습니다.

+0

패키지 구조가 조금 바뀌면 올바른 라이브러리가 dotnet publish 중에 복사되고 LoadLibrary/DllImport가 검색 당 그들을 선택해야한다고 생각합니다. 주문. 나는 RC1 https://blog.3d-logic.com/2015/11/10/using-native-libraries-in-asp-net-5/에 대한 블로그 게시물을 썼고, 네이티브 의존성을 로딩하는 것이 패키지 이 게시물에 설명 된 구조는 작동해야하는 것들을 사용합니다. – Pawel

+1

@Pawel : 나는 그것을 지역적으로 작업 할 수 있었다 ... 나는 그것을 정리할 필요가있다. –