Non è stato ansible trovare “Microsoft.SqlServer.Types” versione 10 o successiva in Azure

Sto cercando di creare un webapi in ASP.NET MVC 4. Il webapi ha utilizzato i tipi di quadro spaziale di Entity Framework 5 e ho scritto un codice molto semplice.

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

Area contiene DbGeometry.

Quando eseguo questo locale funziona, ma quando lo pubblico in azure mi dà questo errore:

Tipi e funzioni spaziali non sono disponibili per questo provider poiché non è stato ansible trovare l’assembly “Microsoft.SqlServer.Types” versione 10 o successiva.

Qualcuno sa come risolvere questo? 🙂

Grazie!

Ho trovato la soluzione! Basta installare il pacchetto nuget Microsoft.SqlServer.Types

PM> Install-Package Microsoft.SqlServer.Types

Link per maggiori informazioni

La risposta sopra funziona bene quando è ansible utilizzare la versione 11 (SQL Server 2012) dell’assembly.

Ho avuto un problema con questo come la mia soluzione ha altre dipendenze sulla versione 13 (SQL Server 2016) dello stesso assembly. In questo caso, notare che Entity Framework (almeno v6.1.3) è hardcoded in SqlTypesAssemblyLoader (l’origine di questa eccezione) per cercare solo le versioni 10 e 11 dell’assembly.

Per ovviare a questo ho scoperto che puoi dire a Entity Framework quale assembly vuoi usare in questo modo:

 SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"; 

Per qualche motivo mi mancava un reindirizzamento vincolante che risolvesse questo problema per me.

Aggiungendo il seguente problema risolto

      

Ci sono 2 modi per risolvere questo:

  1. Se si dispone di accesso al server, è sufficiente installare “Tipi CLR di Microsoft System per SQL Server 2012” da https://www.microsoft.com/en-us/download/details.aspx?id=29065 o utilizzare il collegamento diretto sotto il collegamento diretto a X86: http://go.microsoft.com/fwlink/?LinkID=239643&clcid=0x409 o Collegamento diretto a X64: http://go.microsoft.com/fwlink/?LinkID=239644&clcid=0x409
  2. Il secondo modo è utilizzare il gestore pacchetti NuGet e installarlo

    Pacchetto di installazione Microsoft.SqlServer.Types

Quindi segui le note del plugin come di seguito

Per distribuire un’applicazione che utilizza tipi di dati spaziali su una macchina che non ha “Tipi CLR di sistema per SQL Server” installati, è necessario distribuire anche l’assembly nativo SqlServerSpatial110.dll. Entrambe le versioni x86 (32 bit) e x64 (64 bit) di questo assembly sono state aggiunte al progetto nelle sottodirectory SqlServerTypes \ x86 e SqlServerTypes \ x64. L’assembly nativo msvcr100.dll è anche incluso nel caso in cui il runtime di C ++ non sia installato.

È necessario aggiungere il codice per caricare quello corretto di questi assembly in fase di esecuzione (a seconda dell’architettura corrente).

Applicazioni ASP.NET Per le applicazioni ASP.NET, aggiungere la seguente riga di codice al metodo Application_Start in Global.asax.cs:

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

Applicazioni desktop Per le applicazioni desktop, aggiungere la seguente riga di codice da eseguire prima di eseguire qualsiasi operazione spaziale:

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

Ho anche riscontrato questo problema, ma il pacchetto nuget Microsoft.SqlServer.Types era già installato.

Quello che mi ha risolto il problema era andare a Soluzione> Riferimenti> Proprietà System.Data.Entity> Copia locale e impostarlo su Vero.

Nota: Copia locale per Microsoft.SqlServer.Types era già impostato su true e, anche se il problema riguardava System.Data.Entity, il messaggio di errore era ancora relativo a Microsoft.SqlServer.Types.

La soluzione è dal forum di Windows Azure .

La soluzione per me è stata solo l’aggiunta di questa riga di codice a Global.asax.cs in Application_Start() :

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

Buona fortuna, fratelli miei.

Nessuna delle soluzioni di cui sopra ha funzionato.

  • SQL Server Feature Pack installato? sì
  • Pacchetto NuGet installato? sì
  • DLL esiste in GAC e nel cestino del progetto? sì

Sai cosa, questo errore può anche essere dovuto a risorse basse sul server . Ho riavviato il server SQL e si è risolto automaticamente.

Ho appena avuto lo stesso problema. Sto usando EF6 e chiamando SQL che ha una funzione SQL che utilizza comandi spaziali. Ho provato questo attraverso un test unitario e ha funzionato bene. Quando sono andato a colbind la mia soluzione Asp.Net ho ricevuto l’errore

Tipi e funzioni spaziali non sono disponibili per questo provider poiché non è stato ansible trovare l’assembly “Microsoft.SqlServer.Types” versione 10 o successiva.

Aggiungendo il pacchetto NUGET “Microsoft.SqlServer.Types” e aggiungendo SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin")); al Application_Start method in Global.asax.cs tutto ha funzionato bene.

Nel mio caso, una stringa di connessione mal composta ha causato questo. Verifica se la stringa di connessione è composta correttamente.

Aggiungi “dependentAssembly” al file Web.config

         

Questo ha funzionato per me