繁体   English   中英

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

[英]'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 或更高版本。

任何人都知道如何解决这个问题? :)

谢谢!

我找到了解决方案! 只需安装 nuget 包 Microsoft.SqlServer.Types

PM> 安装包 Microsoft.SqlServer.Types

链接以获取更多信息

当可以使用程序集的版本 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>

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

  1. 如果您有服务器访问权限,只需安装“Microsoft System CLR Types for SQL Server 2012”,它来自https://www.microsoft.com/en-us/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 包管理器并安装

    安装包 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 Server 功能包? 是的
  • 安装了 NuGet 包? 是的
  • DLL 存在于 GAC 和项目 bin 中吗? 是的

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

刚刚有同样的问题。 我使用EF6和调用SQL它具有使用空间命令的SQL函数。 我通过单元测试对此进行了测试,并且效果很好。 当我去连接我的Asp.Net解决方案时,我收到了错误

此提供程序无法使用空间类型和函数,因为找不到程序集“Microsoft.SqlServer.Types”版本 10 或更高版本。

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

在我的情况下,一个糟糕的连接字符串导致了这个。 验证您的连接字符串是否正确组成。

这些都不适合我,因为 Visual Studio 2017 有一个错误。 它在项目外部创建了 sql 服务器类型的两个文件夹,但在 global.asax 上无法识别

我只是从项目外部的文件夹拖到项目内部,而不是在全局中重新注册并工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM