[asp.net-mvc] 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"));

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