2016-08-12 18 views
13

के भीतर SqlServer.Types/स्थानिक प्रकारों का उपयोग कैसे करें हमारे वर्ग पुस्तकालयों में से एक माइक्रोसॉफ्ट स्थानिक प्रकारों जैसे डीबीजीओोग्राफी का उपयोग करता है। जब एसक्यूएल सर्वर और दृश्य स्टूडियो के पुराने संस्करणों के बिना एक साफ मशीन पर हमारे आवेदन चल रहा है, यह अपवाद प्राप्त करें:एएसपी.NET कोर 1.0 एप्लिकेशन

स्थानिक प्रकार और कार्यों इस प्रदाता लिए उपलब्ध नहीं हैं, क्योंकि विधानसभा 'Microsoft.SqlServer.Types' संस्करण 10 या उच्चतर नहीं मिला।

को तैनात करने के लिए:

Install-Package Microsoft.SqlServer.Types 

स्थापित करने के बाद, nuget पैकेज प्रत्येक परियोजना प्रकार से DLLs को संदर्भित करने के निर्देश देता है:

समाधान इस nuget पैकेज स्थापित करने के लिए जाहिरा तौर पर है एक ऐसा एप्लिकेशन जो उस मशीन पर स्थानिक डेटा प्रकारों का उपयोग करता है जिसमें 'SQL सर्वर के लिए सिस्टम CLR प्रकार' स्थापित नहीं है, आपको मूल असेंबली SqlServerSpatial110.dll को भी तैनात करने की आवश्यकता है।

इस असेंबली के x86 (32 बिट) और x64 (64 बिट) संस्करण दोनों को आपके प्रोजेक्ट में SqlServerTypes \ x86 और SqlServerTypes \ x64 उपनिर्देशिका के तहत जोड़ा गया है। C++ रनटाइम स्थापित नहीं होने पर मूल असेंबली msvcr100.dll भी शामिल है।

रनटाइम पर इन असेंबली में से एक को सही लोड करने के लिए आपको कोड जोड़ने की आवश्यकता है (वर्तमान आर्किटेक्चर के आधार पर)।

ASP.NET अनुप्रयोगों ASP.NET अनुप्रयोगों के लिए, Global.asax.cs में Application_Start विधि करने के लिए कोड की निम्न पंक्ति जोड़ें: SqlServerTypes.Utilities.LoadNativeAssemblies (Server.MapPath ("~/bin")) ;

डेस्कटॉप अनुप्रयोगों डेस्कटॉप अनुप्रयोगों के लिए, चलाने के लिए कोड की निम्न पंक्ति जोड़ने के किसी भी स्थानिक संचालन प्रदर्शन कर रहे हैं इससे पहले कि: SqlServerTypes.Utilities.LoadNativeAssemblies (AppDomain.CurrentDomain.BaseDirectory);

nuget पैकेज परियोजना स्थल उत्तर नहीं देता है, तो मुझे यकीन है कि यह सबसे अच्छा तरीका 2016

मेरे समस्या है में अब उपयोग करने के लिए है नहीं कर रहा हूँ, मैं समझ नहीं कैसे से LoadNativeAssemblies कॉल करने के लिए एक एएसपी.नेट कोर 1.0 आवेदन। हम पूर्ण ढांचे (net461) का उपयोग कर रहे हैं और कोर फ्रेमवर्क नहीं।

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     ... 
     SqlServerTypes.Utilities.LoadNativeAssemblies(env.WebRootPath); 
     ... 
    } 
} 

सबसे अच्छा तरीका है SqlServer.Types एक ASP.NET 1.0 आवेदन के भीतर dll फ़ाइलों को शामिल करने क्या है?

संबंधित प्रश्न here और here स्टैक ओवरव्लो पर।

बहुत धन्यवाद।

public class Startup 
    { 
     public Startup(IHostingEnvironment env) 
     { 
      ... 
      SqlServerTypes.Utilities.LoadNativeAssemblies(env.WebRootPath + @"path to the project that contains the SQLServerTypes folder"); 
      ... 
     } 
    } 

मैं देखा कि IHostingEnvironment.WebRootPath रास्ता है कि मेरी समाधान सेटअप में हालांकि wwwroot की ओर संकेत करता रहा, कि फ़ोल्डर के भीतर कई परियोजनाओं है तो बस जो करने के लिए परियोजना यह कह देता है:

+0

क्या आपको इसके साथ कहीं भी मिला? –

+0

कोई प्रगति नहीं है। मुझे अभी भी इसे समझने की उम्मीद है ... – Ender2050

+0

जिज्ञासा से, क्या होता है जब आप ' टी उस लाइन को शामिल नहीं है? मेरे .NET Framework प्रोजेक्ट में, मुझे मैन्युअल रूप से असेंबली लोड करने की आवश्यकता नहीं थी और यह ठीक काम करता था। मैंने इसे अन्य संगतता समस्याओं के कारण अभी तक .NET कोर पर चलाने में कामयाब नहीं रहा है। –

उत्तर

0
इस

मेरे लिए काम करने के लिए लग रहा था मेरी मदद करने के लिए इंगित करें। क्षमा करें अगर यह मदद नहीं करता है।

+1

भी यह डिबगिंग करते समय मेरे लिए 'SqlServerTypes.Utilities.LoadNativeAssemblies (HostingEnvironment.MapPath ("~/bin")); ' – Nova

0

मैं इसे ठीक किया गया है, इसकी नहीं एक साफ ठीक, वास्तव में यह लेकिन साफ ​​सब कुछ है:

मैं एसक्यूएल सर्वर प्रकार पैकेज के साथ/bin नामित संकुल में एक फ़ोल्डर बनाने के लिए था ... और मैं नहीं था यह एएसपी नेट कोर द्वारा संदर्भित प्रत्येक प्रोजेक्ट में है जो एसक्यूएल सर्वर प्रकारों का उपयोग कर रहा था, इसलिए यह लक्ष्य फ़ाइलों में एक बग या मिस्बेहेवियर लगता है।

ध्यान दें कि यह कामकाज आपकी टीम में सभी लोगों द्वारा किया जाना चाहिए क्योंकि/बिन सामग्री स्रोत नियंत्रण में नहीं होगी, जैसा कि इसकी अपेक्षा है।

मुझे आशा है कि यह मदद करता है (इस बीच यह तय हो गई है)

(ठीक है, यह बहुत देर हो चुकी, कल मैं क्या समस्या का कारण पर थोड़ा अधिक लगता हूँ और मैं इसे कैसे ठीक किया गया और अगर मैं एक बेहतर समाधान का लगता है मैं आपको बता दूंगा कि यह अनुमान लगाएगा और अपेक्षित रूप से चलाएगा)

2

मुझे यह आज एएसपी.NET कोर एप्लिकेशन पर काम कर रहा है (.NET Framework, .NET कोर, मूल पोस्टर के समान नहीं)।

मैंने जो बात देखी वह यह है कि मेरे एएसपी.NET कोर साइट पर सीधे नुजेट पैकेज जोड़ना कोई अतिरिक्त फाइल नहीं मिला। सुनिश्चित नहीं है कि संकुल को कभी भी ASP.NET कोर के साथ काम करने के लिए अद्यतन किया गया था?

किसी भी दर पर, मैंने अभी भी एक पारंपरिक .NET Framework 4.x प्रोजेक्ट में पैकेज जोड़ा और इसे बनाया गया SqlServerTypes फ़ोल्डर निकाल दिया, फिर उस फ़ोल्डर को मेरे एएसपी.NET कोर प्रोजेक्ट की जड़ में डाल दिया। Copy to Output DicrectoryDo not copy से Copy Always के नीचे सभी 4 डीएलएल के लिए संपत्ति को बदल दिया, और LoadLibrary() पर कॉल जोड़ा।

यह ध्यान देने योग्य है कि पैकेज का 14.x संस्करण वास्तव में एसक्यूएल vNext है जो बाहर नहीं है, इसे मेरे दिमाग में प्री-रिलीज के रूप में चिह्नित किया जाना चाहिए था। मैं 13.x के साथ अटक गया क्योंकि हम SQL 2016 का उपयोग कर रहे हैं।

मूल रूप से मैंने इसे प्रोग्राम.cs फ़ाइल में रखा था, क्योंकि इसमें मिडलवेयर, सर्विस इंजेक्शन या होस्टिंग कॉन्फ़िगरेशन सेटअप के साथ कुछ भी नहीं था। लेकिन फिर आपको प्रतिबिंब से पास करने के लिए पथ प्राप्त करना होगा, जो बदसूरत महसूस करता था। इसलिए मैंने इसे स्टार्टअप कन्स्ट्रक्टर की पहली पंक्ति के रूप में रखा है, क्योंकि वहां से मैं होस्टिंगइन्वायरमेंट पथ का उपयोग कर सकता हूं।

public Startup(IHostingEnvironment env) 
{ 
    SqlServerTypes.Utilities.LoadNativeAssemblies(env.ContentRootPath); 

    //The normal config as usual down here... 
    var configuration = new ConfigurationBuilder() 
     .SetBasePath(env.ContentRootPath) 
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
     .AddEnvironmentVariables(); 
} 
+0

I' हमने यह कोशिश की है और यह लोड करने के लिए लोडनेटिव एस्सेम्ब्लीज़ के माध्यम से भी कदम उठा सकता है, लेकिन वास्तव में टाइप टी का उपयोग करते समय भी मुझे त्रुटियां मिलती हैं ईएफ के बारे में बताते हुए 'माइक्रोसॉफ्ट एसक्यूएल सर्वर। टाइप' संस्करण 10 या उच्चतर नहीं मिला। क्या तुमने कुछ और किया? –

+0

आपको 'SqlProviderServices.SqlServerTypesAssemblyName = typeof (SqlGeography) जोड़ने की भी आवश्यकता हो सकती है। Assembly.FullName; '' LoadNativeAssemblies 'कॉल के बाद। Https://stackoverflow.com/a/40166192/1727 –

+0

मैंने अपने मामले में ऐसा नहीं किया था, लेकिन मैं एंटिटी फ्रेमवर्क का उपयोग नहीं कर रहा था, हालांकि मुझे एहसास हुआ कि मूल प्रश्न ईएफ के साथ टैग किया गया था, हालांकि पोस्ट कभी नहीं वास्तव में इसका उल्लेख किया। मैंने जो कदम उठाए थे वे डीएएल अज्ञेयवादी थे। क्या यह ईएफ 6 या ईएफ कोर में प्रासंगिक है? –

4

मैं इसे web.config फ़ाइल में बाइंडिंग रीडरेक्ट के साथ ठीक करता हूं।

<dependentAssembly> 
    <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" /> 
    </dependentAssembly> 

im एसक्यूएल 2016 का उपयोग कर, ASP.NET (कोई कोर) और एफई 6.0.0.0

+0

यह प्रश्न विशेष रूप से एएसपी.नेट कोर के बारे में है, इसलिए आपका उत्तर किसी भी तरह से उपयोगी नहीं है। – Stijn

0

.net कोर 2.0 का उपयोग करना। ऊपर वर्णित nuget पैकेज को स्थापित करने के बाद मैंने BuildWebHost (args) के साथ लाइन से पहले Program.cs में इसे रखा .रुन(); और यह काम किया ..

उपयोगिताएं। लोडनेटिवएस्सेबलीज (AppDomain.CurrentDomain.BaseDirectory); SqlProviderServices.SqlServerTypesAssemblyName = "माइक्रोसॉफ्ट एसक्यूएल सर्वर। टाइप, संस्करण = 14.0.0।0, संस्कृति = तटस्थ, PublicKeyToken = 89845dcd8080cc91 ";

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