'Microsoft.SqlServer.Types' sürüm 10 veya üzeri Azure'da bulunamadı


98

ASP.NET MVC 4'te bir webapi yapmaya çalışıyorum. Webapi Entity Framework 5 Spatial türlerini kullandı ve çok basit bir kod yazdım.

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

Alan DbGeometry içerir.

Bu yerel çalıştırdığımda işe yarıyor, ancak onu Azure'a yayınladığımda bana şu hatayı veriyor:

Uzamsal türler ve işlevler bu sağlayıcı için kullanılamaz çünkü 'Microsoft.SqlServer.Types' derlemesi sürüm 10 veya üstü bulunamadı.

Bunu nasıl çözeceğini bilen var mı? :)

Teşekkürler!


2
Azure Web Sitelerini mi yoksa Bulut Hizmetlerinde bir web rolü mü kullanıyorsunuz? Ayrıca, veritabanınız bir SQL Azure veritabanı mı? Yerel kodunuzu SQL Azure veritabanında çalıştırmayı denediniz mi ve bu işe yarıyor mu?
Joe Capka

Yanıtlar:


131

Çözümü buldum! Sadece Microsoft.SqlServer.Types nuget paketini kurun

PM> Install-Package Microsoft.SqlServer.Types

Daha fazla bilgi için bağlantı


4
Teşekkürler. Bu, sabah 2'de yayınladıktan sonra başıma geldi.
Lee Smith

3
O nuget paketini koyduğuma sevindim! Her zaman beni de alır.
Pure.Krome

AMAN TANRIM! Sadece DbGeography kullanmak için web uygulamasına neredeyse 2MB'lık ikili veri ekler (hayır, teşekkürler) SQL Server'da kullanırken CPU üzerinde de ağırdır ... onu çıkarır.
Yovav

13
@Yovav, en azından bir diskette çalışıyorsunuz 2 MB ikili verinin uygulamanızın performansına herhangi bir etkisi olduğunu düşünmüyorum. Bir kıyaslama yapmanızı ve CPU'daki etkiyi (gerçek verilerle) bize bildirmenizi öneririm.
Diomedes Domínguez

3
Bu sorunu çözmek için yeterli değildi, Chris'in cevabını da yapmalıydım .
Shimmy Weitzhandler

115

Yukarıdaki cevap , derlemenin 11 sürümü (SQL Server 2012) kullanılabildiğinde iyi çalışıyor.

Çözümümün aynı derlemenin sürüm 13 (SQL Server 2016) üzerinde başka bağımlılıkları olduğu için bununla ilgili bir sorun yaşadım. Bu durumda Entity Framework'ün (en azından v6.1.3) SqlTypesAssemblyLoader (bu istisnanın kaynağı) içinde yalnızca derlemenin 10 ve 11 sürümlerini aramak için kodlandığını unutmayın .

Bunu çözmek için Entity Framework'e hangi derlemeyi şu şekilde kullanmak istediğinizi söyleyebileceğinizi keşfettim:

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

2
Harika nokta - yalnızca SQL 2014 CLR Türlerinin kurulu olduğu makineler için de geçerlidir. Bizim durumumuzda, SQL 2012 CLR Türlerini yeni kurduk ve sorunu çözdü; ancak montajların daha yüksek sürümlerine belirli bir bağımlılığınız varsa, bu en iyi çözüm gibi görünüyor.
Andras Zoltan

1
Statik bir kamu malıdır. Uygulama başlangıcında ayarlanmalıdır. Örneğin, web uygulamamın Global.asax.cs dosyasındaki Application_Start olayında ayarlıyorum.
Chris

3
+1 Bu benim için işe yarayan tek şey. Onu özel EntityContextsınıfımın yapıcısına koydum (devralan DbContext)
Chris

2
Pastırmamı kurtardım!
Matt Cashatt

23
Montaj adını sabit kodlamaktan kaçınmak için kullanabileceğinizSqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
Samuel Jack

68

Bazı nedenlerden dolayı, bu sorunu benim için düzelten bir bağlama yönlendirmesini kaçırdım.

Aşağıdakileri eklemek sorunumu çözdü

    <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
Makinenizdeki Microsoft.SqlServer.Types sürüm numarasının ne olduğunu öğrenmek için, AppDomain currentDomain = AppDomain.CurrentDomain; Assembly[] assems = currentDomain.GetAssemblies(); foreach (Assembly assembly in assems) { _logger.Info(assembly.GetName().FullName); }_logger'ın bir Nlog kaydedici olduğu yeri kullanabilirsiniz
Daniël Tulp

1
Bu, sorunumu çözdü (benim durumumda türler zaten yüklü olduğu için). Herhangi biri SQL Sunucu Türlerini yükledikten sonra hala hatayı alıyorsa, bu yanıtı kontrol edin.
Can Poyrazoğlu

1
@ R2D2 Teşekkürler, bu benim için de düzeltti.
Ogglas

1
SQLServerTypes'i kurdum ve hala bir sorunla karşı karşıyaydı. Bunu web.config'e eklemek benim için sorunu çözdü.
saurabhj

26

Bunu düzeltmenin 2 yolu vardır:

  1. Sunucu erişiminiz varsa, "SQL Server 2012 için Microsoft Sistem CLR Türleri" ni yükleyin, https://www.microsoft.com/en-us/download/details.aspx?id=29065 Veya Doğrudan Bağlantının Altında Doğrudan Bağlantı Kullanın X86'ya: http://go.microsoft.com/fwlink/?LinkID=239643&clcid=0x409 veya X64'e Doğrudan Bağlantı: http://go.microsoft.com/fwlink/?LinkID=239644&clcid=0x409
  2. İkinci yol NuGet paket yöneticisini kullanmak ve kurmaktır

    Yükleme Paketi Microsoft.SqlServer.Types

Ardından aşağıdaki eklenti notlarını takip edin

Uzamsal veri türlerini kullanan bir uygulamayı 'SQL Server için Sistem CLR Türleri' kurulu olmayan bir makineye dağıtmak için yerel SqlServerSpatial110.dll derlemesini de dağıtmanız gerekir. Bu derlemenin hem x86 (32 bit) hem de x64 (64 bit) sürümleri, projenize SqlServerTypes \ x86 ve SqlServerTypes \ x64 alt dizinleri altına eklenmiştir. Yerel derleme msvcr100.dll, C ++ çalışma zamanının yüklü olmaması durumunda da dahil edilir.

Çalışma zamanında bu derlemelerden doğru birini yüklemek için kod eklemeniz gerekir (mevcut mimariye bağlı olarak).

ASP.NET uygulamaları ASP.NET uygulamaları için, Global.asax.cs içindeki Application_Start yöntemine aşağıdaki kod satırını ekleyin:

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

Masaüstü uygulamaları Masaüstü uygulamaları için, herhangi bir uzamsal işlem gerçekleştirilmeden önce çalıştırılacak aşağıdaki kod satırını ekleyin:

SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

2
SQL Server veya NuGet yüklemek hiçbir şeyi çözmedi, bu basit CLR Türleri sorunu çözdü. Kabul edilen çözüm bu olmalıdır.
Can Poyrazoğlu

1
X64 bağlantısı benim için Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) 28 Ekim 2016 18:17:30 üzerinde çalışıyor Windows 10 Enterprise'da Telif Hakkı (c) Microsoft Corporation Express Edition (64-bit) 6.3 <X64> (Derleme 10586:)
zapoo

ASP.NET stil yükleyicisini kullanmam gerekiyordu ama benim geliştirme yolum ~/yerine ~/bin. Yolunuzu da kontrol ettiğinizden emin olun.
jocull

İstediğim SQL sürümü için SQL sunucu paketini yükleyebildim, ancak her SQL sunucu sürümü için hepsi farklı olduğundan, bağlama yönlendirmesinin yüklü olan sürüme yönlendirildiğinden kesinlikle emin olmalıydım.
Chris Rice

13

Bu sorunla da karşılaştım, ancak Microsoft.SqlServer.Types nuget paketi zaten yüklenmişti.

Benim için sorunu çözen, Solution> References> System.Data.Entity> Properties> Copy Local'e gidip True olarak ayarlamaktı.

Not: Microsoft.SqlServer.Types için Yerel Kopyala zaten doğru olarak ayarlanmıştı ve sorun System.Data.Entity ile ilgili olmasına rağmen, hata iletisi hala Microsoft.SqlServer.Types hakkındaydı.

Çözüm, Windows Azure forumundandır .


1
Bu seçenek nuget paketlerinde mevcut değildir.
Shimmy Weitzhandler

Bunun nedeni, belirtildiği gibi, nuget seçeneklerinde değil, referansın özellikler seçeneklerinde olmasıdır :) Çözümünüz için teşekkür ederiz! Benim için çalıştı
Emixam23

9

Lütfen Web.config dosyasını "bağımlıAssembly" ekleyin

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

Bu benim için çalıştı


5

Benim için çözüm, şu kod satırını Global.asax.cs'ye eklemekti Application_Start():

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

İyi şanslar kardeşlerim.


3

Bir takiben yorumunu Konsol App benim sorunum (preferebly ana fonksiyona) bu iki satırı ekleyerek, cari yazı için bir yanıtında çözüldü:

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

3

Benim durumumda (a WebForms App) ben aşağıdaki satırları ekleyerek sorunu çözüldü Application_Startait Global.asaxdosyada.

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

Umarım birine yardımcı olur.


1
bu VS 2019 ortamı, en son düzeltme için çalıştı. paylaştığınız için teşekkürler
coder kemp

1

Yukarıdaki çözümlerden hiçbiri beni işe yaramadı.

  • SQL Server Özellik paketi yüklü mü? Evet
  • NuGet paketi yüklendi mi? Evet
  • DLL, GAC'de ve proje kutusunda var mı? Evet

Biliyorsunuz, bu hata sunucudaki düşük kaynaklardan da kaynaklanıyor olabilir . SQL sunucusunu yeniden başlattım ve otomatik olarak çözüldü.


0

Sadece aynı sorunu yaşadım. Uzamsal komutlar kullanan bir SQL işlevi olanı kullanıyorum EF6ve arıyorum SQL. Bunu bir birim testi ile test ettim ve iyi çalıştı. Benim kadar Tel gittiğimde Asp.Netçözümü ben hata aldım

Uzamsal türler ve işlevler bu sağlayıcı için kullanılamaz çünkü 'Microsoft.SqlServer.Types' derlemesi sürüm 10 veya üstü bulunamadı.

Ekleyerek NUGETpaketi "Microsoft.SqlServer.Types" ve ekleme SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));için Application_Start methodde Global.asax.csher şeyi cezası çalıştı.


0

Benim durumumda, kötü oluşturulmuş bir bağlantı dizisi buna neden oldu. Bağlantı dizenizin düzgün bir şekilde oluşturulduğunu doğrulayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.