[英]'Microsoft.SqlServer.Types' version 10 or higher could not be found on Azure
我正在尝试在 ASP.NET MVC 4 中创建一个 webapi。该 webapi 使用 Entity Framework 5 空间类型,我编写了一个非常简单的代码。
public List<Area> GetAllAreas()
{
List<Area> aList = db.Areas.ToList();
return aList;
}
区域包含 DbGeometry。
当我在本地运行它时它可以工作,但是当我将它发布到 azure 时它给了我这个错误:
空间类型和函数不适用于此提供程序,因为找不到程序集“Microsoft.SqlServer.Types”版本 10 或更高版本。
任何人都知道如何解决这个问题? :)
谢谢!
当可以使用程序集的版本 11 (SQL Server 2012) 时,上面的答案工作正常。
我遇到了这个问题,因为我的解决方案对同一程序集的版本 13 (SQL Server 2016) 有其他依赖性。 在这种情况下,请注意实体框架(至少 v6.1.3)在其SqlTypesAssemblyLoader (此异常的来源)中进行了硬编码,以仅查找程序集的版本 10 和 11。
为了解决这个问题,我发现你可以告诉 Entity Framework 你想使用哪个程序集,如下所示:
SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
出于某种原因,我错过了一个绑定重定向,它为我解决了这个问题。
添加以下内容解决了我的问题
<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>
有两种方法可以解决这个问题:
第二种方法是使用 NuGet 包管理器并安装
安装包 Microsoft.SqlServer.Types
然后按照下面的插件说明进行操作
要将使用空间数据类型的应用程序部署到未安装“SQL Server 的系统 CLR 类型”的计算机,您还需要部署本机程序集 SqlServerSpatial110.dll。 此程序集的 x86(32 位)和 x64(64 位)版本都已添加到项目的 SqlServerTypes\\x86 和 SqlServerTypes\\x64 子目录下。 如果未安装 C++ 运行时,还包括本机程序集 msvcr100.dll。
您需要添加代码以在运行时加载正确的程序集之一(取决于当前架构)。
ASP.NET 应用程序对于 ASP.NET 应用程序,将以下代码行添加到 Global.asax.cs 中的 Application_Start 方法:
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
桌面应用程序对于桌面应用程序,添加以下代码行以在执行任何空间操作之前运行:
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
请在 Web.config 文件中添加“dependentAssembly”
<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>
这对我有用
我也遇到过这个问题,不过已经安装了Microsoft.SqlServer.Types nuget包。
什么解决了我的问题是去解决方案>引用> System.Data.Entity>属性>复制本地,并将其设置为True。
注意: Microsoft.SqlServer.Types 的 Copy Local 已经设置为 true,即使问题出在 System.Data.Entity 上,错误消息仍然是关于 Microsoft.SqlServer.Types。
解决方案来自Windows Azure 论坛。
我的解决方案只是将这行代码添加到Application_Start()
Global.asax.cs :
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
祝我的兄弟们好运。
在当前帖子的答案中发表评论后,添加这两行(最好是主函数)解决了我的控制台应用程序问题:
SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);
在我的情况下(一个 WebForms 应用程序),我解决了在Global.asax
文件的Application_Start
中添加以下行的问题。
SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";
我希望它可以帮助某人。
以上解决方案都没有对我有用。
你知道吗,这个错误也可能是由于服务器上的资源不足。 我重新启动了 SQL 服务器,它自动解决了。
刚刚有同样的问题。 我使用EF6
和调用SQL
它具有使用空间命令的SQL函数。 我通过单元测试对此进行了测试,并且效果很好。 当我去连接我的Asp.Net
解决方案时,我收到了错误
此提供程序无法使用空间类型和函数,因为找不到程序集“Microsoft.SqlServer.Types”版本 10 或更高版本。
通过添加NUGET
包“Microsoft.SqlServer.Types”并添加SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
到Global.asax.cs
的Application_Start method
一切正常。
在我的情况下,一个糟糕的连接字符串导致了这个。 验证您的连接字符串是否正确组成。
这些都不适合我,因为 Visual Studio 2017 有一个错误。 它在项目外部创建了 sql 服务器类型的两个文件夹,但在 global.asax 上无法识别
我只是从项目外部的文件夹拖到项目内部,而不是在全局中重新注册并工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.