다음을 통해 공유


Azure Data Lake Analytics가 .NET Framework v4.7.2로 업그레이드

중요합니다

Azure Data Lake Analytics는 2024년 2월 29일에 사용 중지되었습니다. 이 공지 사항을 통해 자세히 알아보세요.

데이터 분석을 위해 조직은 Azure Synapse Analytics 또는 Microsoft Fabric을 사용할 수 있습니다.

Azure Data Lake Analytics 기본 런타임은 .NET Framework v4.5.2에서 .NET Framework v4.7.2로 업그레이드됩니다. 이 변경으로 인해 U-SQL 코드에서 사용자 지정 어셈블리를 사용하고 해당 사용자 지정 어셈블리가 .NET 라이브러리를 사용하는 경우 변경 내용이 손상될 위험이 적습니다.

.NET Framework 4.5.2에서 버전 4.7.2로 업그레이드하면 U-SQL 런타임에 배포된 .NET Framework(기본 런타임)가 항상 4.7.2가 됩니다. .NET Framework 버전에는 병렬 옵션이 없습니다.

.NET Framework 4.7.2로 업그레이드가 완료되면 시스템의 관리 코드가 버전 4.7.2로 실행되고 U-SQL 사용자 지정 어셈블리와 같은 사용자가 제공한 라이브러리는 어셈블리가 생성된 버전에 적합한 이전 버전과 호환되는 모드로 실행됩니다.

  • 버전 4.5.2에 대해 어셈블리 DLL이 생성된 경우 배포된 프레임워크는 4.5.2 라이브러리로 처리하여(몇 가지 예외를 제외하고) 4.5.2 의미 체계를 제공합니다.
  • 이제 .NET Framework 4.7.2를 대상으로 하는 경우 버전 4.7.2 기능을 사용하는 U-SQL 사용자 지정 어셈블리를 사용할 수 있습니다.

.NET Framework 4.7.2로의 업그레이드로 인해 .NET 사용자 지정 어셈블리를 사용하는 U-SQL 작업에 주요 변경 내용이 도입될 가능성이 있습니다. 아래 절차를 사용하여 이전 버전과의 호환성 문제를 확인하는 것이 좋습니다.

이전 버전과의 호환성 문제를 확인하는 방법

U-SQL 사용자 지정 어셈블리의 .NET 코드에서 .NET 호환성 검사를 실행하여 이전 버전과의 호환성을 깨뜨릴 수 있는 문제를 확인합니다.

비고

도구는 실제로 호환성이 깨지는 변경 사항을 감지하지 않습니다. 특정 입력의 경우 문제가 발생할 수 있는 .NET API만 식별합니다. 문제에 대한 알림을 받는 경우 코드는 여전히 괜찮을 수 있지만 자세한 내용은 체크 인해야 합니다.

  1. 다음과 같은 방법으로 .NET DLL에서 이전 버전과의 호환성 검사기를 실행합니다.
    1. Visual Studio 확장에서 .NET 이식성 분석기 확장 사용
    2. GitHub dotnetapiport에서 독립 실행형 도구를 다운로드하고 사용합니다. 독립 실행형 도구를 실행하기 위한 지침은 GitHub dotnetapiport 호환성 관련 변경 사항에 있습니다.
    3. 4.7.2. 호환성, read isRetargeting == True 가능한 문제를 식별합니다.
  2. 도구에서 코드가 이전 버전과 호환되지 않을 수 있는지 여부를 나타내는 경우(비호환성의 몇 가지 일반적인 예는 아래에 나열되어 있음) 다음을 통해 자세히 확인할 수 있습니다.
    1. 코드 분석 및 코드가 영향을 받은 API에 값을 전달하는지 확인
    2. 런타임 검사를 수행합니다. 런타임 배포는 ADLA에서 나란히 수행되지 않습니다. 대표 데이터 집합에 대해 로컬 .NET Framework 4.7.2와 함께 VisualStudio의 로컬 실행을 사용하여 업그레이드 전에 런타임 검사를 수행할 수 있습니다.
  3. 이전 버전과의 하위 호환성 결여가 실제로 영향을 미치는 경우, 데이터를 수정하거나 코드 논리를 수정하는 등 이를 해결하기 위한 필요한 조치를 취하세요.

대부분의 경우 이전 버전과의 비호환성의 영향을 받지 않아야 합니다.

타임라인

여기서 런타임 문제 해결에서 새 런타임의 배포를 확인하고 이전에 성공한 작업을 확인할 수 있습니다.

제 시간에 내 코드를 검토할 수 없는 경우 어떻게 해야 하나요?

이전 런타임 버전(4.5.2를 대상으로 빌드됨)에 대해 작업을 제출할 수 있지만 .NET Framework 병렬 기능이 없기 때문에 여전히 4.5.2 호환 모드에서만 실행됩니다. 이 동작으로 인해 이전 버전과의 호환성 문제가 여전히 발생할 수 있습니다.

발생할 수 있는 가장 일반적인 이전 버전과의 호환성 문제는 무엇인가요?

검사기에서 식별할 수 있는 가장 일반적인 역함수 비호환성은 (자체 내부 ADLA 작업에서 검사기를 실행하여 이 목록을 생성함), 영향을 받는 라이브러리(참고: 라이브러리를 간접적으로만 호출할 수 있으므로 작업이 영향을 받는지 확인하기 위해 필요한 작업 #1을 수행하는 것이 중요함) 및 해결할 수 있는 작업입니다. 참고: 자체 작업의 거의 모든 경우에, 경고는 대부분의 주요 변화의 특성이 제한적이어서 잘못된 경고로 밝혀졌습니다.

  • 결과 작업을 완료하려면 IAsyncResult.CompletedSynchronously 속성이 정확해야 합니다.

    • TaskFactory.FromAsync를 호출할 때 결과 작업이 완료되려면 IAsyncResult.CompletedSynchronously 속성의 구현이 정확해야 합니다. 즉, 구현이 동기적으로 완료된 경우에만 속성이 true를 반환해야 합니다. 이전에는 속성이 확인되지 않았습니다.
    • 영향을 받은 라이브러리: mscorlib, System.Threading.Tasks
    • 제안된 작업: TaskFactory.FromAsync가 true를 올바르게 반환하는지 확인
  • DataObject.GetData는 이제 데이터를 UTF-8로 검색합니다.

    • .NET Framework 4를 대상으로 하거나 .NET Framework 4.5.1 이전 버전에서 실행되는 앱의 경우 DataObject.GetData는 HTML 형식의 데이터를 ASCII 문자열로 검색합니다. 따라서 ASCII가 아닌 문자(ASCII 코드가 0x7F보다 큰 문자)는 .NET Framework 4.5 이상을 대상으로 하고 .NET Framework 4.5.2 DataObject.GetData 에서 실행되는 두 개의 임의 문자로 표시됩니다.#N##N#For 앱은 HTML 형식의 데이터를 UTF-8로 검색합니다. 이는 0x7F 보다 큰 문자를 올바르게 나타냅니다.
    • 영향을 받은 라이브러리: Glo
    • 제안된 작업: 검색된 데이터가 원하는 형식인지 확인
  • XmlWriter가 잘못된 서로게이트 쌍에서 예외를 발생시킵니다.

    • .NET Framework 4.5.2 또는 이전 버전을 대상으로 하는 앱에서는 예외 대체 처리를 사용하여 잘못된 서로그레이트 쌍을 작성해도 항상 예외를 발생시키지는 않습니다. .NET Framework 4.6을 대상으로 하는 앱에서 잘못된 서로게이트 쌍을 쓰려고 시도하면 ArgumentException 예외가 발생합니다.
    • 영향을 받은 라이브러리: System.Xml, System.Xml.ReaderWriter
    • 제안된 작업: 인수 예외를 발생시키는 잘못된 서로게이트 쌍을 작성하지 않는지 확인합니다.
  • HtmlTextWriter가 <br/> 요소를 올바르게 렌더링하지 않음

    • .NET Framework 4.6부터 HtmlTextWriter.RenderBeginTag()HtmlTextWriter.RenderEndTag()<BR /> 요소와 함께 호출할 때, 두 개가 아닌 하나의 <BR />만 올바르게 삽입됩니다.
    • 영향을 받은 라이브러리: System.Web
    • 제안된 작업: 프로덕션 작업에서 임의의 동작이 발생하지 않도록 예상되는 양의 <BR />을 삽입해야 합니다.
  • null 인수를 사용하여 CreateDefaultAuthorizationContext 호출이 변경되었습니다.

    • null authorizationPolicies 인수를 사용하여 CreateDefaultAuthorizationContext(IList<IAuthorizationPolicy>) 호출하여 반환된 AuthorizationContext의 구현은 .NET Framework 4.6에서 구현을 변경했습니다.
    • 영향을 받은 라이브러리: System.IdentityModel
    • 제안된 작업: null 권한 부여 정책이 있을 때 새 예상 동작을 처리하고 있는지 확인합니다.
  • 이제 RSACng에서 비표준 키 크기의 RSA 키를 올바르게 로드합니다.

    • 4.6.2 이전의 .NET Framework 버전에서 RSA 인증서의 비표준 키 크기를 가진 고객은 GetRSAPublicKey()GetRSAPrivateKey() 확장 메서드를 통해 해당 키에 액세스할 수 없습니다. CryptographicException에서 "요청된 키 크기가 지원되지 않습니다."라는 메시지를 포함한 예외가 발생합니다. .NET Framework 4.6.2에서는 이 문제가 해결되었습니다. 마찬가지로, RSA.ImportParameters()RSACng.ImportParameters() 이제는 '를 throw CryptographicException하지 않고 비표준 키 크기로 작업합니다.
    • 영향을 받은 라이브러리: mscorlib, System.Core
    • 제안된 작업: RSA 키가 예상대로 작동하는지 확인
  • 경로 콜론 검사가 더 엄격합니다.

    • .NET Framework 4.6.2에서는 이전에 지원되지 않는 경로(길이 및 형식 모두)를 지원하기 위해 많은 변경이 이루어졌습니다. 적절한 드라이브 구분 기호(콜론) 구문에 대한 검사가 더 정확해졌으며, 이는 허용되던 몇 가지 선택 경로 API에서 일부 URI 경로를 차단하는 부작용이 있었습니다.
    • 영향을 받은 라이브러리: mscorlib, System.Runtime.Extensions
    • 제안된 작업:
  • ClaimsIdentity 생성자에 대한 호출

    • .NET Framework 4.6.2부터 T:System.Security.Claims.ClaimsIdentity 매개 변수가 있는 T:System.Security.Principal.IIdentity 생성자가 P:System.Security.Claims.ClaimsIdentify.Actor 속성을 설정하는 방법이 변경되었습니다. 인수가 T:System.Security.Principal.IIdentity 개체이고, T:System.Security.Claims.ClaimsIdentityP:System.Security.Claims.ClaimsIdentify.Actor 개체의 T:System.Security.Claims.ClaimsIdentity 속성이 null가 아닌 경우, P:System.Security.Claims.ClaimsIdentify.Actor 속성은 M:System.Security.Claims.ClaimsIdentity.Clone 메서드를 사용하여 연결됩니다. Framework 4.6.1 및 이전 버전 P:System.Security.Claims.ClaimsIdentify.Actor 에서는 속성이 기존 참조로 연결됩니다. 이 변경으로 인해 .NET Framework 4.6.2부터, 새 P:System.Security.Claims.ClaimsIdentify.Actor 개체의 T:System.Security.Claims.ClaimsIdentity 속성이 생성자의 P:System.Security.Claims.ClaimsIdentify.Actor 인수의 T:System.Security.Principal.IIdentity 속성과 같지 않습니다. .NET Framework 4.6.1 이전 버전에서는 동일합니다.
    • 영향을 받은 라이브러리: mscorlib
    • 제안된 작업: ClaimsIdentity가 새 런타임에 예상대로 작동하는지 확인
  • DataContractJsonSerializer를 사용하여 컨트롤 문자의 직렬화는 이제 ECMAScript V6 및 V8과 호환됩니다.

    • .NET Framework 4.6.2 및 이전 버전에서 DataContractJsonSerializer는 ECMAScript V6 및 V8 표준과 호환되는 방식으로 \b, \f 및 \t와 같은 일부 특수 컨트롤 문자를 직렬화하지 않았습니다. .NET Framework 4.7부터 이러한 컨트롤 문자의 serialization은 ECMAScript V6 및 V8과 호환됩니다.
    • 영향을 받은 라이브러리: System.Runtime.Serialization.Json
    • 제안된 작업: DataContractJsonSerializer와 동일한 동작 확인