webform tutorial net mvc entre ejemplos diferencias asp asp.net-mvc entity-framework azure

asp.net mvc - tutorial - ''Microsoft.SqlServer.Types'' versión 10 o superior no se pudo encontrar en Azure



webform mvc (9)

Estoy tratando de hacer un webapi en ASP.NET MVC 4. Los webapi usaron Entity Framework 5 Spatial types y escribí un código muy simple.

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

El área contiene DbGeometry.

Cuando ejecuto este local, funciona, pero cuando lo publico en azul me da este error:

Los tipos y funciones espaciales no están disponibles para este proveedor porque no se pudo encontrar el ensamblado ''Microsoft.SqlServer.Types'' versión 10 o superior.

Alguien sabe como resolver esto ? :)

¡Gracias!


¡Encontré la solución! Simplemente instale el paquete nuget Microsoft.SqlServer.Types

PM> Install-Package Microsoft.SqlServer.Types

Enlace para más información


En mi caso, una cadena de conexión mal compuesta causó esto. Verifique si su cadena de conexión está compuesta correctamente.


Hay 2 formas de arreglar eso:

  1. Si tiene acceso al servidor, solo instale "Tipos de CLR del sistema de Microsoft para SQL Server 2012", es de https://www.microsoft.com/en-us/download/details.aspx?id=29065 O utilice el enlace directo debajo del enlace directo a X86: http://go.microsoft.com/fwlink/?LinkID=239643&clcid=0x409 , o enlace directo a X64: http://go.microsoft.com/fwlink/?LinkID=239644&clcid=0x409
  2. La segunda forma es usar el administrador de paquetes NuGet e instalar

    Install-Package Microsoft.SqlServer.Types

Luego sigue las notas del complemento como se muestra a continuación

Para implementar una aplicación que utiliza tipos de datos espaciales en una máquina que no tiene instalados los ''Tipos de CLR del sistema para SQL Server'', también debe implementar el ensamblado nativo SqlServerSpatial110.dll. Ambas versiones x86 (32 bit) y x64 (64 bit) de este ensamblado se han agregado a su proyecto en los subdirectorios SqlServerTypes / x86 y SqlServerTypes / x64. El ensamblado nativo msvcr100.dll también se incluye en caso de que el tiempo de ejecución de C ++ no esté instalado.

Necesita agregar código para cargar el ensamblaje correcto en el tiempo de ejecución (dependiendo de la arquitectura actual).

Aplicaciones ASP.NET Para aplicaciones ASP.NET, agregue la siguiente línea de código al método Application_Start en Global.asax.cs:

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

Aplicaciones de escritorio Para aplicaciones de escritorio, agregue la siguiente línea de código para ejecutar antes de realizar cualquier operación espacial:

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


La answer anterior funciona bien cuando se puede usar la versión 11 (SQL Server 2012) del ensamblaje.

Tuve un problema con esto ya que mi solución tiene otras dependencias en la versión 13 (SQL Server 2016) del mismo ensamblado. En este caso, tenga en cuenta que Entity Framework (al menos v6.1.3) está codificado en su SqlTypesAssemblyLoader (el origen de esta excepción) para buscar únicamente las versiones 10 y 11 del ensamblado.

Para solucionar este problema, descubrí que puede decirle a Entity Framework qué ensamblaje desea usar de esta manera:

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


La solución para mí fue simplemente agregar esta línea de código a Global.asax.cs en Application_Start() :

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

Buena suerte mis hermanos.


Ninguna de las soluciones anteriores me funcionó.

  • Paquete de características de SQL Server instalado? Sí
  • Paquete NuGet instalado? Sí
  • ¿DLL existe en GAC y en el contenedor del proyecto? Sí

Sabes qué, este error también puede deberse a los bajos recursos en el servidor . Reinicié el servidor SQL y se resolvió automáticamente.


Por alguna razón, me faltaba una redirección vinculante que me solucionó este problema.

Agregar lo siguiente solucionó mi problema

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


Solo tuve el mismo problema. Estoy usando EF6 y llamando a SQL que tiene una función SQL que usa comandos espaciales. Probé esto a través de una prueba unitaria y funcionó bien. Cuando fui a conectar mi solución Asp.Net , recibí el error

Los tipos y funciones espaciales no están disponibles para este proveedor porque no se pudo encontrar el ensamblado ''Microsoft.SqlServer.Types'' versión 10 o superior.

Al agregar el paquete NUGET "Microsoft.SqlServer.Types" y agregar SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin")); al Application_Start method en Global.asax.cs todo funcionó bien.


También encontré este problema, pero el paquete nuget Microsoft.SqlServer.Types ya estaba instalado.

Lo que me solucionó el problema fue ir a Solución> Referencias> System.Data.Entity> Properties> Copy Local, y establecerlo en True.

Nota: Copiar local para Microsoft.SqlServer.Types ya estaba establecido en verdadero, y aunque el problema era con System.Data.Entity, el mensaje de error seguía siendo sobre Microsoft.SqlServer.Types.

La solución es del foro de Windows Azure .