Azure上找不到“Microsoft.SqlServer.Types”版本10或更高版本

我正在尝试在ASP.NET MVC 4中制作webapi。webapi使用了Entity Framework 5 Spatialtypes,我写了一个非常简单的代码。

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

区域包含DbGeometry。

当我运行这个本地的工作,但是当我发布到azure,它给了我这个错误:

空间types和函数不适用于此提供程序,因为找不到程序集“Microsoft.SqlServer.Types”版本10或更高版本。

任何人都知道如何解决此问题? 🙂

谢谢!

我find了解决scheme! 只需安装nuget包Microsoft.SqlServer.Types

PM> Install-Package Microsoft.SqlServer.Types

链接了解更多信息

上面的答案在程序集的版本11(SQL Server 2012)可以使用时正常工作。

我有这个问题,因为我的解决scheme有相同的程序集的版本13(SQL Server 2016)的其他依赖项。 在这种情况下,请注意Entity Framework(至less是v6.1.3)在其SqlTypesAssemblyLoader (这个exception的来源)中被硬编码,只查找程序集的版本10和版本11。

要解决这个问题,我发现你可以告诉entity framework你想使用这个组件:

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

出于某种原因,我错过了一个绑定的redirect,为我解决了这个问题。

添加以下修复我的问题

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

我也遇到了这个问题,但是Microsoft.SqlServer.Types nuget包已经安装。

什么解决了我的问题是解决scheme>参考> System.Data.Entity>属性>复制本地,并将其设置为True。

注意:为Microsoft.SqlServer.Types复制本地已被设置为true,即使问题与System.Data.Entity,错误消息仍然是关于Microsoft.SqlServer.Types。

解决scheme来自Windows Azure论坛 。

有两种方法可以解决这个问题:

  1. 如果您有服务器访问权限,只需安装“用于SQL Server 2012的Microsoft系统CLRtypes”即可从https://www.microsoft.com/zh-CN/download/details.aspx?id=29065获取或在直接链接下使用直接链接到X86:; http : //go.microsoft.com/fwlink/? LinkID=239643&clcid=0x409,或直接链接到X64: http : //go.microsoft.com/fwlink/? LinkID=239644&clcid= 0x409
  2. 第二种方法是使用NuGet包pipe理器并安装

    安装程序包Microsoft.SqlServer.Types

然后按照下面的插件注释

要将使用空间数据types的应用程序部署到没有安装“用于SQL Server的系统CLRtypes”的计算机上,还需要部署本机程序集SqlServerSpatial110.dll。 这个程序集的x86(32位)和x64(64位)版本已经被添加到您的项目的SqlServerTypes \ x86和SqlServerTypes \ x64子目录下。 本地程序集msvcr100.dll也包含在未安装C ++运行时的情况下。

您需要添加代码以在运行时加载正确的这些程序集(取决于当前的体系结构)。

ASP.NET应用程序对于ASP.NET应用程序,将以下代码行添加到Global.asax.cs中的Application_Start方法中:

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

桌面应用程序对于桌面应用程序,请在执行任何空间操作之前添加以下代码行:

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

对于我来说,解决scheme只是将这一行代码添加到Application_Start() Global.asax.cs中:

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

祝你好运,我的兄弟。

上述解决scheme都不能解决我的问题。

  • SQL Serverfunction包安装? 是
  • NuGet包安装? 是
  • DLL存在于GAC和项目箱? 是

你知道吗,这个错误也可能是由于服务器资源不足造成 。 我重新启动SQL服务器,它自动解决。

刚刚有同样的问题。 我正在使用EF6并调用具有使用空间命令的SQL函数的SQL。 我通过unit testing来testing它,它工作正常。 当我去连接我的Asp.Net解决scheme时,我收到了错误

空间types和函数不适用于此提供程序,因为找不到程序集“Microsoft.SqlServer.Types”版本10或更高版本。

通过添加NUGET包“Microsoft.SqlServer.Types”并添加SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));Global.asax.csApplication_Start method一切正常。

在我的情况下,一个糟糕的连接string造成了这种情况。 validation您的连接string是否正确组成。