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

时间:2012-11-01 09:28:37

标签: asp.net-mvc entity-framework azure

我正在尝试在ASP.NET MVC 4中创建一个webapi.webapi使用了Entity Framework 5 Spatial类型,我编写了一个非常简单的代码。

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

区域包含DbGeometry。

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

  

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

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

谢谢!

12 个答案:

答案 0 :(得分:114)

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

即可
  

PM&GT;安装包Microsoft.SqlServer.Types

Link for more info

答案 1 :(得分:83)

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

我遇到了问题,因为我的解决方案对同一程序集的版本13(SQL Server 2016)有其他依赖性。在这种情况下请注意,Entity Framework(至少v6.1.3)在其 SqlTypesAssemblyLoader (此异常的来源)中进行了硬编码,仅查找程序集的版本10和11。

为了解决这个问题,我发现你可以告诉Entity Framework你想要使用哪个程序集:

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;

答案 2 :(得分:55)

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

添加以下修复我的问题

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

答案 3 :(得分:22)

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

  1. 如果您有服务器访问权限,只需安装“SQL Server 2012的Microsoft系统CLR类型” 来自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包管理器并安装

    Install-Package Microsoft.SqlServer.Types

  3. 然后按照下面的插件说明进行操作

      

    将使用空间数据类型的应用程序部署到计算机   没有SQL Server&#39;系统CLR类型的SQL Server&#39;安装你   还需要部署本机程序集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);
    

答案 4 :(得分:13)

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

解决问题的方法是解决方案&gt;参考文献&gt; System.Data.Entity&gt;属性&gt;复制本地,并将其设置为True。

注意: Copy for Local for Microsoft.SqlServer.Types已设置为true,即使问题出在System.Data.Entity上,错误消息仍然是Microsoft.SqlServer.Types。

解决方案来自Windows Azure forum

答案 5 :(得分:4)

我的解决方案只是将这行代码添加到Application_Start()中的Global.asax.cs中:

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

祝我兄弟们好运。

答案 6 :(得分:3)

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

这对我有用

答案 7 :(得分:1)

以上解决方案都不适合我。

  • 是否安装了SQL Server功能包?是
  • 安装NuGet包?是
  • DLL存在于GAC和项目bin中?是

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

答案 8 :(得分:1)

在当前帖子的答案中紧跟comment之后,添加这两行(最好是main函数)解决了我的Console App问题:

Private Sub SearchSheet()

    Dim Sheet As Worksheet
    Dim Output As String

    For Each Sheet In Worksheets
        Output = Sheet.Cells(1, 4) ' Cell D1

        If Output = vbNullString Then
            MsgBox "Sheet: " & Sheet.Name
            Sheet.Activate
            Exit Sub
        End If
    Next

    ' Clean
    Set Sheet = Nothing

End Sub

答案 9 :(得分:0)

刚刚遇到同样的问题。我正在使用EF6并调用SQL,它具有使用空间命令的SQL函数。我通过单元测试对此进行了测试,并且工作正常。当我开始连接我的Asp.Net解决方案时,我收到了错误

  

此提供程序无法使用空间类型和功能   因为汇编了Microsoft.SqlServer.Types&#39; 10或更高版本   无法找到。

添加NUGET包&#34; Microsoft.SqlServer.Types&#34;并将SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));添加到Application_Start method中的Global.asax.cs,一切正常。

答案 10 :(得分:0)

就我而言,一个组合严重的连接字符串导致了这种情况。验证您的连接字符串是否正确组合。

答案 11 :(得分:0)

以我的情况(一个WebForms应用程序)为例,我解决了在Application_Start文件的Global.asax中添加以下几行的问题。

SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin"));
System.Data.Entity.SqlServer.SqlProviderServices.SqlServerTypesAssemblyName = "Microsoft.SqlServer.Types, Version=14.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91";

我希望它能对某人有所帮助。