developer tip

Azure에서 'Microsoft.SqlServer.Types'버전 10 이상을 찾을 수 없습니다.

copycodes 2020. 9. 6. 10:12
반응형

Azure에서 'Microsoft.SqlServer.Types'버전 10 이상을 찾을 수 없습니다.


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 이상을 찾을 수 없기 때문에이 공급자에 대해 공간 형식 및 함수를 사용할 수 없습니다.

누구든지 이것을 해결하는 방법을 알고 있습니까? :)

감사!


해결책을 찾았습니다! Nuget 패키지 Microsoft.SqlServer.Types를 설치하십시오.

PM> 설치 패키지 Microsoft.SqlServer.Types

추가 정보 링크


대답 은 어셈블리 버전 11 (SQL Server 2012)을 사용할 수있을 때 제대로 작동합니다.

내 솔루션에는 동일한 어셈블리의 버전 13 (SQL Server 2016)에 대한 다른 종속성이 있기 때문에이 문제가 발생했습니다. 이 경우 Entity Framework (최소 v6.1.3)는 어셈블리의 버전 10과 11 만 찾도록 SqlTypesAssemblyLoader (이 예외의 소스 )에 하드 코딩되어 있습니다.

이 문제를 해결하기 위해 다음과 같이 사용할 어셈블리를 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. 서버 액세스 권한이있는 경우 https://www.microsoft.com/en-us/download/details.aspx?id=29065 에서 "Microsoft System CLR Types for SQL Server 2012"를 설치 하거나 직접 링크 아래에 직접 링크 사용 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 하위 디렉터리 아래의 프로젝트에 추가되었습니다. 네이티브 어셈블리 msvcr100.dll은 C ++ 런타임이 설치되지 않은 경우에도 포함됩니다.

런타임시 이러한 어셈블리 중 올바른 어셈블리를로드하려면 코드를 추가해야합니다 (현재 아키텍처에 따라 다름).

ASP.NET 응용 프로그램 ASP.NET 응용 프로그램의 경우 Global.asax.cs의 Application_Start 메서드에 다음 코드 줄을 추가합니다.

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

데스크톱 애플리케이션 데스크톱 애플리케이션의 경우 공간 작업을 수행하기 전에 실행할 다음 코드 줄을 추가합니다.

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

이 문제도 발생했지만 Microsoft.SqlServer.Types 너겟 패키지가 이미 설치되어 있습니다.

나를 위해 문제를 해결 한 것은 Solution> References> System.Data.Entity> Properties> Copy Local로 이동하여 True로 설정하는 것이 었습니다.

참고 : Microsoft.SqlServer.Types에 대한 로컬 복사는 이미 true로 설정되었으며 System.Data.Entity에 문제가 있었지만 오류 메시지는 여전히 Microsoft.SqlServer.Types에 대한 것입니다.

솔루션은 Windows Azure 포럼에서 제공 합니다.


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>

이것은 나를 위해 일했습니다.


나를위한 해결책은 다음 코드를 Global.asax.cs에 추가하는 것입니다 Application_Start().

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

내 형제들에게 행운을 빕니다.


Following a comment in an answer for current post, adding these two lines (preferebly to the main function) solved my problem for Console App:

SqlProviderServices.SqlServerTypesAssemblyName = typeof(SqlGeography).Assembly.FullName;
SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

None of the above solutions worked me.

  • SQL Server Feature pack installed? Yes
  • NuGet package installed? Yes
  • DLL exists in GAC and in the project bin? Yes

You know what, this error can also be due to low resources on the server. I restarted SQL server and it got resolved automatically.


Just had the same issue. I am using EF6 and calling SQL which has a SQL function that uses spatial commands. I tested this through a unit test and it worked fine. When I went to wire up my Asp.Net solution I received the error

Spatial types and functions are not available for this provider because the assembly 'Microsoft.SqlServer.Types' version 10 or higher could not be found.

By adding the NUGET package "Microsoft.SqlServer.Types" and adding SqlServerTypes.Utilities.LoadNativeAssemblies(Server.MapPath("~/bin")); to the Application_Start method in Global.asax.cs everything worked fine.


In my case, a badly composed connection string caused this. Verify if your connection string is properly composed.


In my case (a WebForms App) I solved the problem adding the following lines in the Application_Start of the Global.asax file.

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

I hope it helps someone.

참고URL : https://stackoverflow.com/questions/13174197/microsoft-sqlserver-types-version-10-or-higher-could-not-be-found-on-azure

반응형