2016-07-13 13 views
17

मैंने एक बहुत ही सरल प्रोग्राम बनाया है जो Google क्लाउड प्रोजेक्ट में उपलब्ध विषयों को सूचीबद्ध करना चाहिए। कोड तुच्छ है:Google.Pubsub.V1 beta01 डॉटनेट क्ली परियोजनाओं के साथ क्यों काम नहीं करता है?

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 से चलाने के लिए, यह ठीक काम करता है। जब मैं निम्नलिखित project.json फ़ाइल के साथ डॉटनैट 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-क्लाउड-डॉटनेट' टैग को हमारे Google क्लाउड .NET क्लाइंट लाइब्रेरी ग्राहकों के लिए केंद्रीय टैग के रूप में बनाना था। लेकिन मुझे उम्मीद है कि यह है ऐसा कुछ जो स्वाभाविक रूप से अच्छी तरह से आ सकता है ...) –

उत्तर

14

यह वर्तमान में जीआरपीसी 0.15 में एक सीमा है, जो Google.Pubsub.V1 अपने आरपीसी परिवहन के रूप में उपयोग करता है। Msbuild के तहत, Grpc.Core पैकेज में फ़ाइल सभी मूल बाइनरी को प्रतिस्थापित करती है। डीएनएक्स के तहत, पैकेज कॉपी नहीं किए गए थे और जीआरपीसी स्थानीय पैकेज भंडार के साथ फ़ाइल को सही जगह पर देखने की कोशिश करता है। डॉटनेट क्ली के तहत, हमें पुस्तकालयों की मेजबानी के लिए पैकेज में "runtimes" रूट निर्देशिका का उपयोग करने की आवश्यकता है।

हमारे पास implemented a fix for this in gRPC है, लेकिन हमने बीटा -01 रिलीज में इसे प्रबंधित करने का प्रबंधन नहीं किया। हम बीटा -201 के लिए इसे ठीक करने की उम्मीद कर रहे हैं।

यह संभव बस मैन्युअल रूप से फ़ाइल को कॉपी करके इस को हल करने के लिए है:

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 

... लेकिन यह है कि स्पष्ट रूप से बहुत बारीकियों है। मैं बस एमएसबिल्ड का उपयोग करने का सुझाव देता हूं जब तक कि अंतर्निहित समस्या ठीक नहीं हो जाती।

+0

मुझे लगता है कि पैकेज संरचना थोड़ा बदल गई है, तो सही पुस्तकालयों को डॉटनेट प्रकाशन के दौरान कॉपी किया जाएगा और लोड लाइब्रेरी/डीएलआईपोर्ट को खोज के अनुसार उन्हें उठाया जाना चाहिए आदेश। मैंने आरसी 1 https://blog.3d-logic.com/2015/11/10/using-native- पुस्तकालय-in-asp-net-5/ के लिए एक ब्लॉग पोस्ट लिखा और देशी निर्भरताओं को लोड करते समय अब ​​पैकेज अलग-अलग काम करता है इस पोस्ट में वर्णित संरचना का उपयोग किया जाना चाहिए चीजों को काम करना चाहिए। – Pawel

+1

@ पावेल: मैंने इसे स्थानीय रूप से काम करने में कामयाब रहा है ... मुझे बस इसे साफ करने की जरूरत है। –

संबंधित मुद्दे