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论坛 。
有两种方法可以解决这个问题:
- 如果您有服务器访问权限,只需安装“用于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
-
第二种方法是使用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.cs
的Application_Start method
一切正常。
在我的情况下,一个糟糕的连接string造成了这种情况。 validation您的连接string是否正确组成。