'Microsoft.SqlServer.Types' संस्करण 10 या उच्चतर Azure पर नहीं पाया जा सका


98

मैं ASP.NET MVC 4 में एक वेबएपी बनाने की कोशिश कर रहा हूं। वेबपी ने एंटिटी फ्रेमवर्क 5 स्पेसियल प्रकारों का उपयोग किया है और मैंने एक बहुत ही सरल कोड लिखा है।

  public List<Area> GetAllAreas()
    {
        List<Area> aList = db.Areas.ToList();
        return aList;
    }

क्षेत्र में DbGeometry शामिल है।

जब मैं इस स्थानीय कार्य को चलाता हूं, लेकिन जब मैं इसे प्रकाशित करता हूं तो यह मुझे यह त्रुटि देता है:

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

किसी को पता है कि यह कैसे हल करने के लिए? :)

धन्यवाद!


2
क्या आप Azure वेब साइट्स या क्लाउड सेवाओं में वेब भूमिका का उपयोग कर रहे हैं? इसके अलावा, क्या आपका डेटाबेस SQL ​​Azure डेटाबेस है? क्या आपने SQL Azure डेटाबेस के खिलाफ अपना स्थानीय कोड चलाने की कोशिश की है, और क्या वह काम करता है?
जो कपा नोवा

जवाबों:


131

मैंने हल ढूंढ लिया! बस nuget पैकेज Microsoft.SqlServer.Types स्थापित करें

PM> इंस्टॉल-पैकेज Microsoft.SqlServer.Types

अधिक जानकारी के लिए लिंक


4
धन्यवाद। मेरे ठीक 2 बजे प्रकाशित होने के बाद यह हुआ।
ली स्मिथ

3
मुझे खुशी है कि मैंने उस नगेट पैकेज को तैयार किया! यह हमेशा मुझे भी मिलता है।
शुद्ध। क्रोम

हे भगवान! यह वेब ऐप में लगभग 2MB बाइनरी डेटा जोड़ता है सिर्फ DbGeography (कोई धन्यवाद नहीं) का उपयोग करने के लिए यह सीपीयू पर भारी है जब इसे SQL सर्वर में उपयोग किया जाता है ... इसे बाहर ले जाना।
योव

13
@ योवव, कम से कम आप एक फ्लॉपी डिस्क में चल रहे हैं, मुझे नहीं लगता कि 2 एमबी बाइनरी डेटा का आपके एप्लिकेशन के प्रदर्शन में कोई प्रभाव है। मेरा सुझाव है कि आप एक बेंचमार्क चलाएं और हमें बताएं (वास्तविक डेटा के साथ) सीपीयू में प्रभाव।
डियोमेडेस डोमिनगेज

3
इस मुद्दे को हल करने के लिए पर्याप्त नहीं था, मुझे क्रिस का जवाब भी देना था।
शिम्मी वेइटहैंडलर

114

इस सवाल का जवाब काम करता है ठीक ऊपर जब संस्करण 11 (SQL सर्वर 2012) विधानसभा के लिए इस्तेमाल किया जा सकता है।

मुझे इसकी समस्या थी क्योंकि मेरे समाधान में उसी विधानसभा के संस्करण 13 (एसक्यूएल सर्वर 2016) पर अन्य निर्भरताएं हैं। इस मामले में ध्यान दें कि एंटिटी फ्रेमवर्क (कम से कम v6.1.3) इसके SqlTypesAssemblyLoader (इस अपवाद का स्रोत) में केवल विधानसभा के संस्करण 10 और 11 को देखने के लिए हार्डकोड किया गया है।

इसके आसपास काम करने के लिए मुझे पता चला कि आप एंटिटी फ्रेमवर्क बता सकते हैं कि आप किस विधानसभा का इस तरह उपयोग करना चाहते हैं:

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;

2
शानदार स्पॉट - उन मशीनों पर भी लागू होता है जहां केवल SQL 2014 CLR प्रकार स्थापित हैं। हमारे मामले में, हमने सिर्फ एसक्यूएल 2012 सीएलआर प्रकार स्थापित किए और इसने समस्या को ठीक किया; लेकिन अगर आपके पास विधानसभाओं के उच्च संस्करणों पर एक विशिष्ट निर्भरता है तो यह सबसे अच्छा समाधान प्रतीत होता है।
एंड्रास ज़ोल्टन

1
यह एक स्थिर सार्वजनिक संपत्ति है। इसे एप्लिकेशन स्टार्ट-अप पर सेट किया जाना चाहिए। जैसे मैं अपने वेब एप्लिकेशन के Global.asax.cs में Application_Start इवेंट में इसे सेट कर रहा हूं।
क्रिस

3
+1 यह केवल एक चीज है जिसने मेरे लिए काम किया है। मैंने इसे अपने कस्टम EntityContextवर्ग (जो विरासत में मिला है DbContext) के कंस्ट्रक्टर में डाल दिया ।
क्रिस

2
मेरे बेकन को बचा लिया!
मैट कैसहेट

23
असेंबली नाम का हार्ड-कोडिंग से बचने के लिए आप उपयोग कर सकते हैंSqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
सैमुअल जैक

68

किसी कारण से मुझे एक बाध्यकारी रीडायरेक्ट याद आ रही थी जिसने मेरे लिए इस समस्या को ठीक कर दिया।

निम्नलिखित को जोड़कर मेरी समस्या का समाधान किया

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

2
यह जानने के लिए कि संस्करण संख्या Microsoft की है। AppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }SqlServer.Types on your machine, आप उपयोग कर सकते हैं जहाँ _logger एक Nlog लकड़हारा है
Tulp

1
इससे मेरी समस्या हल हो गई (जैसा कि मेरे मामले में पहले से ही स्थापित था)। यदि SQL सर्वर प्रकार स्थापित करने के बाद भी किसी को त्रुटि मिलती है, तो इस उत्तर को जांचें।
कर सकते हैं Poyrazoğlu

1
@ R2D2 धन्यवाद, इसने मेरे लिए भी इसे ठीक कर दिया।
ओग्लास

1
मैंने SQLServerTypes स्थापित किया था और अभी भी एक समस्या का सामना कर रहा था। इसे web.config में जोड़ना मेरे लिए इसे ठीक करता है।
सुरभज

25

इसे ठीक करने के 2 तरीके हैं:

  1. यदि आपके पास सर्वर एक्सेस है, तो बस "Microsoft सिस्टम CLR प्रकार SQL सर्वर 2012 के लिए" स्थापित करें यह https://www.microsoft.com/en-us/download/details.aspx?id=29065 से है या डायरेक्ट लिंक के नीचे डायरेक्ट लिंक का उपयोग करें X86: http://go.microsoft.com/fwlink/?LinkID=239643&clcid=0x409 , या X64 से सीधा लिंक: http://go.microsoft.com/fwlink/?LinkID=2344&clcid=0x409
  2. दूसरा तरीका NuGet पैकेज मैनेजर का उपयोग करना और इंस्टॉल करना है

    Microsoft-qlServer.Types को स्थापित करें

फिर नीचे दिए गए प्लगइन नोट्स का पालन करें

ऐसी मशीन तैनात करने के लिए जो स्थानिक डेटा प्रकारों का उपयोग करती है, जिसमें 'सिस्टम CLR प्रकार SQL सर्वर के लिए' स्थापित करने के लिए आपको मूल असेंबली 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);

2
SQL सर्वर या NuGet को स्थापित करने से कुछ भी हल नहीं हुआ, उन सरल CLR प्रकारों ने समस्या को हल किया। यह स्वीकृत समाधान होना चाहिए।
Can Poyrazoğlu

1
X64 का लिंक मेरे लिए Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 28 अक्टूबर 2016 18:17:30 कॉपीराइट (c) Microsoft कॉर्पोरेशन एक्सप्रेस संस्करण (64-बिट) विंडोज 10 एंटरप्राइज पर काम किया गया है 6.3 <X64> (बिल्ड 10586:)
zapoo

मुझे ASP.NET स्टाइल लोडर का उपयोग करने की आवश्यकता थी, लेकिन ~/इसके बजाय मेरा विकास पथ था ~/bin। अपनी पाथिंग को भी जांचना सुनिश्चित करें।
17

मैं SQL सर्वर पैक SQL मैं चाहता था के संस्करण के लिए स्थापित करने में सक्षम था, लेकिन मुझे यकीन है कि बाध्यकारी पुनर्निर्देशित स्थापित संस्करण में बताया गया था के रूप में वे प्रत्येक SQL सर्वर संस्करण के लिए सभी अलग हैं।
क्रिस राइस

13

मुझे भी इस समस्या का सामना करना पड़ा, लेकिन Microsoft.SqlServer.Types नूगट पैकेज पहले से स्थापित था।

मेरे लिए समस्या का हल क्या था> समाधान> संदर्भ> System.Data.Entity> गुण> स्थानीय कॉपी करें, और इसे True पर सेट करने जा रहा था।

नोट: Microsoft के लिए स्थानीय कॉपी करें। SqlServer.Types पहले से ही सही पर सेट था, और भले ही समस्या System.Data.Entity के साथ थी, त्रुटि संदेश अभी भी Microsoft.SqlServer.Types के बारे में था।

इसका समाधान विंडोज एज़्योर फोरम से है


1
यह विकल्प नगेट पैकेज पर उपलब्ध नहीं है।
शिमी वेइटहैंडलर

ऐसा इसलिए है, जैसा कि उल्लेख किया गया है, यह संदर्भ के गुणों के विकल्प में है, न कि नगेट के विकल्पों में :) अपने वर्कअराउंड के लिए धन्यवाद! मेरे लिए काम किया
Emixam23

8

कृपया Web.config फ़ाइल में "dependAssembly" जोड़ें

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <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>
    </assemblyBinding>
</runtime>

इसने मेरे लिए काम किया


5

मेरे लिए समाधान सिर्फ Global.asax.cs में कोड की इस पंक्ति को जोड़ रहा था Application_Start():

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));

सौभाग्य मेरे भाइयों।


3

वर्तमान पोस्ट के लिए एक उत्तर में एक टिप्पणी के बाद, इन दो पंक्तियों को जोड़ने (मुख्य कार्य के लिए पूर्ववर्ती) सांत्वना के लिए मेरी समस्या को हल किया:

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

2

मेरे मामले (एक WebForms अनुप्रयोग) में मैं में निम्नलिखित लाइनों को जोड़ने समस्या हल Application_Startकी Global.asaxफ़ाइल।

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";

मुझे उम्मीद है कि यह किसी की मदद करता है।


यह वीएस 2019 पर्यावरण, नवीनतम सुधार के लिए काम करता है। साझा करने के लिए धन्यवाद
कोडर केम्प

1

उपरोक्त समाधानों में से किसी ने मुझे काम नहीं किया।

  • SQL सर्वर सुविधा पैक स्थापित? हाँ
  • NuGet पैकेज स्थापित? हाँ
  • DLL में और प्रोजेक्ट बिन में DLL मौजूद है? हाँ

आप जानते हैं कि, यह त्रुटि सर्वर पर कम संसाधनों के कारण भी हो सकती है । मैंने SQL सर्वर को फिर से शुरू किया और यह अपने आप हल हो गया।


0

बस एक ही मुद्दा था। मैं उपयोग कर रहा हूं EF6और कॉल कर रहा हूं SQLजिसमें एसक्यूएल फ़ंक्शन है जो स्थानिक कमांड का उपयोग करता है। मैंने एक इकाई परीक्षण के माध्यम से यह परीक्षण किया और यह ठीक काम किया। जब मैं अपने Asp.Netसमाधान को तार करने के लिए गया तो मुझे त्रुटि मिली

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

जोड़ कर NUGETपैकेज "Microsoft.SqlServer.Types" और जोड़ने SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));के लिए Application_Start methodमें Global.asax.csसब कुछ ठीक काम किया।


0

मेरे मामले में, एक बुरी तरह से बनाई गई कनेक्शन स्ट्रिंग ने इसका कारण बना। सत्यापित करें कि क्या आपका कनेक्शन स्ट्रिंग ठीक से बना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.