.NET Framework 3.5 SP1의 변경 내용
이 문서에서는 .NET Framework 버전 3.5에서 .NET Framework 버전 3.5 SP1(서비스 팩 1)로 업그레이드할 때 애플리케이션 또는 환경에서 고려해야 할 수 있는 디자인 변경 사항을 설명합니다.
변경은 제품 문제, 표준 준수, 고객 피드백 및 보안에 대한 수정을 포함하여 여러 가지 이유로 발생합니다. 이 항목에서는 주목할 만한 변경 내용만 설명합니다. 새 기능에 대한 자세한 내용은 .NET Framework
다음 섹션에서는 .NET Framework 버전 3.5 SP1의 변경 내용을 설명합니다.
공용 언어 런타임
성능 향상 이제 애플리케이션은 데이터 실행 방지를 사용하여 실행 불가능한 메모리 위치에서 코드를 삽입하고 실행하려는 시도를 방지합니다. 관리 코드 실행(MSIL 어셈블리, NGen 이미지 및 관리되지 않는 코드 포함)에 대한 보안은 ASLR(주소 공간 레이아웃 임의화)에 의해 강화됩니다. 강력한 이름의 서명된 어셈블리는 완전히 신뢰할 수 있고 완전히 신뢰할 수 있는 애플리케이션 도메인에 로드되는 경우 로드 시 서명을 확인할 필요가 없습니다. 이렇게 변경하면 중복 검사가 제거되고 어셈블리에 서명되었지만 GAC(전역 어셈블리 캐시)에 설치되지 않은 애플리케이션의 시작 성능이 향상됩니다. 네트워크 공유에서 시작된 애플리케이션은 관리되지 않는 실행 파일과 동일한 동작을 가지며 부분 신뢰가 아닌 완전 신뢰로 작동합니다. 이제 StringFreezingAttribute 특성이 무시됩니다. 이 특성은 네이티브 이미지 생성기(Ngen.exe)를 사용하여 네이티브 이미지를 만드는 데 사용되었습니다. JIT(Just-In-Time) 컴파일러의 인라이너가 훨씬 개선되어 더 나은 품질 코드를 생성합니다. 그러나 인라인을 변경하면 TypeAttributes.BeforeFieldInit 열거형 값을 사용하는 생성자로 클래스가 인스턴스화된 애플리케이션에 영향을 줍니다. 이러한 형식의 정적 초기화는 정적 필드에 액세스하기 전에 한 번에 발생하지만 정적 메서드 또는 인스턴스 생성자가 호출되기 전에는 발생하지 않습니다. 클래스 생성자가 호출되는 정확한 시간은 .NET Framework 버전 3.5 및 3.5 SP1에서 다를 수 있습니다. 다른 JIT 컴파일러 변경에는 부동 소수점 반올림 오류에 대한 변경 내용과 종료자의 타이밍 변경이 포함됩니다. 수정할 필요가 없습니다. |
ADO.NET
Value Serializer 클래스의 CanConvertToString 메서드 System.Windows.Converters 네임스페이스의 값 직렬 변환기 클래스에 대한 CanConvertToString 메서드는 false반환하는 대신 ArgumentException throw합니다. System.Data.SqlClient.SQLDataReader.GetString 및 oth er Get 메서드는 요청되는 형식으로 데이터를 캐스팅할 수 없는 경우 InvalidCastException throw합니다. 이제 메시지에는 "'System.Decimal' 형식의 개체를 'System.String' 형식으로 캐스팅할 수 없습니다."와 같은 형식이 포함됩니다. 수정할 필요가 없습니다. |
UDT 열에서 SQLDataReader.GetString 이제 UDT(사용자 정의 형식) 열에서 SQLDataReader.GetString 메서드를 호출하면 "Cast가 Byte[]에서 String으로 지원되지 않습니다."라는 오류 메시지 대신 InvalidCastException throw됩니다. 수정할 필요가 없습니다. |
C#
ASP.NET, IIS
IIS 통합 모드 IIS(인터넷 정보 서비스) 7.0의 통합 모드에서 HttpServerUtility.TransferRequest 메서드는 HTTPResponse.End 메서드를 잘못 사용하여 부모 요청을 중지합니다. 이로 인해 ThreadAbortException throw되며, 이는 응답 실행을 종료하는 성능에 영향을 줄 수 있습니다. .NET Framework 3.5 SP1에서 TransferRequest 메서드는 이제 HttpApplication.CompleteRequest 메서드를 사용하여 부모 요청을 종료합니다. 또한 예외를 throw하지 않고 HttpApplication.EndRequest 이벤트 처리기로 제어를 전송하여 현재 요청을 정상적으로 종료합니다. 제안된 수정 사항: TransferRequest 메서드를 사용하여 ThreadAbortException throw되었는지 여부를 확인하는 오류 처리 코드가 있는 경우 catch 블록에서 해당 코드를 제거할 수 있습니다. (마지막으로 블록은 계속 실행됩니다.) |
Windows 통합 인증 보안 변경은 System.Net.HttpWebRequest, System.Net.HttpListener, System.Net.Security.NegotiateStream 및 System.Net 네임스페이스의 관련 클래스에서 Windows 통합 인증을 처리하는 방법에 영향을 줍니다. 이러한 변경은 Windows 통합 인증을 사용하도록 구성된 웹 서버 및 클라이언트 애플리케이션에 영향을 미칠 수 있습니다. Windows 통합 인증과 함께 사용되는 Microsoft Windows NTLM(NTLM) 인증 프로세스에는 클라이언트 컴퓨터로 다시 전송되는 대상 컴퓨터에서 발급한 문제가 포함됩니다. 컴퓨터가 자체 생성한 챌린지를 받으면 연결이 루프 백 연결(예: IPv4 주소 127.0.0.1)이 아니면 인증이 실패합니다. 이제 HttpWebRequest 클래스는 기본적으로 NTLM 인증 프로세스에 사용되는 SPN(서비스 사용자 이름)의 요청 URL에 사용되는 호스트 이름을 지정합니다. 제안된 수정 사항: URI에 의해 인덱싱된 문자열 사전에 인증하는 동안 사용할 사용자 지정 SPN을 제공할 수 있습니다. 이 사전은 System.Net.AuthenticationManager.CustomTargetNameDictionary 속성을 사용하여 가져옵니다. 다음 레지스트리 설정을 추가하여 루프 백 연결에 이름을 매핑할 수도 있습니다.
|
CDOSYS System.Web.Mail 네임스페이스의 클래스는 다음 버전의 Windows(Windows 7)에서 사용할 수 없는 Windows 2000 구성 요소에 대한 공동 작업 데이터 개체를 사용합니다. 따라서 Windows 7에서 이러한 클래스를 사용하면 PlatformNotSupportedException throw됩니다. 제안된 수정 사항: System.Web.Mail .NET Framework 버전 2.0에서 더 이상 사용되지 않습니다. 대신 System.Net.Mail 네임스페이스에서 메일 지원을 사용합니다. |
ASP.NET 요청 유효성 검사 ASP.NET 요청 유효성 검사에는 이제 왼쪽 꺾쇠괄호 및 물음표 문자 시퀀스 확인이 포함됩니다. Su ggested 수정: 일반적으로 쿠키 변수의 쿼리 문자열에 XML 주석을 포함할 이유가 없으므로 이 변경의 영향을 최소화해야 합니다. |
URL 유효성 검사 이제 ASP.NET ASP.NET 페이지에서 액세스할 때 URL의 일부의 유효성을 검사합니다. 그러나 URL 다시 쓰기를 사용하는 경우 Request.RawUrl 속성을 사용하여 페이지의 이전 버전의 URL에 액세스할 수 있습니다. 제안된 수정 사항: 필요한 경우 페이지에서 유효성 검사를 사용하지 않도록 설정합니다. |
세션 상태 세션 상태 공급자는 CreateUninitializedItem 메서드를 포함하여 System.Web.SessionState.SessionState.SessionStateStoreProviderBase 클래스에 정의된 모든 멤버를 구현해야 합니다. 그러나 이 메서드는 사이트에서 쿠키 없는 세션 상태를 사용 중인 경우에만 호출되었습니다. 쿠키 없는 세션 상태를 사용하지 않은 개발자는 사용자 지정 공급자에서 createUninitializedItem .NET Framework 3.5 SP1이 릴리스되면 쿠키 세션 상태가 사용되는 특정 상황에서도 CreateUninitializedItem 메서드를 호출할 수 있습니다. 제안된 수정 사항: 사용자 지정 공급자에서 CreateUninitializedItem 구현합니다. 지정된 세션 ID에 대한 "라이브" 항목이 이미 있는지 확인합니다. 항목이 없으면 공급자는 세션 ID에 대한 항목을 만들어야 합니다. |
URL 인코딩 이제 ASP.NET 삭제 문자(7F) 및 모든 ASCII 컨트롤 문자(가로 탭 제외)를 포함하도록 아웃바운드 HTTP 헤더의 URL 인코딩을 확장합니다. 제안된 수정 사항: 필요한 경우 다음과 같이 기본 헤더 인코딩 동작을 해제할 수 있습니다.
|
IIS DefaultHTTPHandler 통합 모드 애플리케이션에 대한 System.Web.DefaultHTTPHandler 클래스가 IIS 7.0에서 사용되지 않는 모듈로 만들어졌지만 여전히 사용할 수 있었습니다. 이제 PlatformNotSupported 예외가 throw됩니다. 제안된 수정 사항: 통합 모드에서 제대로 작동하도록 애플리케이션 구성을 변경합니다. |
서버 및 클라이언트 번호 서식 일관성
Number.localeFormat 함수의 서식 지정 동작(클라이언트에서 실행)은 이제 String.Format 메서드(서버에서 실행)를 준수합니다. 예를 들어 다음 코드는
.NET Framework 3.5 SP1 이전에는 다음 코드가
이제 localeFormat 수정할 필요가 없습니다. |
숨겨진 필드 이제 VIEWSTATE같은 숨겨진 ASP.NET 필드가 컨트롤을 렌더링하기 전에 제안된 수정 사항: 새 renderAllHiddenFieldsAtTopOfForm 특성을 false로 설정하여 이 동작을 해제할 수 있습니다. 기본값은 true입니다. |
WPF(Windows Presentation Foundation)
BitmapEffect 클래스는 사용되지 않는 제안된 수정 사항: 레거시 BitmapEffect 및 파생 클래스를 사용하지 않고 대신 효과파생된 새 클래스인BlurEffect, DropShadowEffect및 ShaderEffect사용합니다. ShaderEffect파생하여 고유한 효과를 만들 수도 있습니다. |
어셈블리 이름 변경 WPF의 핵심 렌더링 계층을 포함하는 어셈블리의 이름이 milcore.dll wpfgfx_v0300.dll. 이 어셈블리에는 공용 API가 없었습니다. 수정할 필요가 없습니다. |
하이퍼링크 동작 Hyperlink.NavigateUri 속성의 값이 사용자가 하이퍼링크 위로 마우스 커서를 가져가는 시간과 사용자가 하이퍼링크를 클릭하는 시간 사이에 변경되는 경우 커서가 하이퍼링크를 마우스로 가리킬 때 가져온 URI를 사용하여 탐색이 수행됩니다. 수정할 필요가 없습니다. |
Windows Vista 보호 모드에서 Internet Explorer Internet Explorer가 Windows Vista의 보호 모드인 경우 DHTML 경고() 함수 및 HTML에서 호스트되는 ActiveX 컨트롤의 모달 대화 상자가 표시되지 않고 차단됩니다. 또한 HTML을 호스팅하는 WebBrowser 컨트롤 또는 Frame 컨트롤이 XBAP(XMAL 브라우저 애플리케이션)에 있고 XBAP가 HTML 페이지에서 도메인 간 로드되면 예외가 throw됩니다. 수정할 필요가 없습니다. |
Value Serializer 클래스 CanConvertToString은 System.Windows.Media.Converters 및 System.Windows.Media.Media3D.Converters 네임스페이스의 값 직렬 변환기 클래스에 대한 메서드를false반환하는 대신 ArgumentException throw합니다. 수정할 필요가 없습니다. |
WCF(Windows Communication Foundation) 및 WF(Windows Workflow Foundation)
스키마 일치 UriTemplate 및 UriTemplateTable 클래스에서 사용하는 스키마 일치 체계는 HTTP 이외의 스키마를 사용하여 기본 주소를 허용하도록 완화되었습니다. 이제 후보 URI를 템플릿과 일치시키는 경우 이러한 클래스 중 어느 것도 스키마 또는 포트 번호를 사용하지 않습니다. 후행 슬래시 및 기본값에 대한 템플릿 지원이 추가되었습니다. 수정할 필요가 없습니다. |
인증 대한 혼합 모드 보안이 있는 사용자 계정으로 서비스를 실행하는 경우 EndPointIdentity UPN(사용자 계정 이름) ID가 있어야 합니다. 이전 버전의 WCF에서는 필요하지 않았습니다. 제안된 수정 사항: 클라이언트가 SecurityMode.TransportWithMessageCredential 설정(Windows 인증, UPN 인증 또는 지문 인증 사용)을 사용하도록 설정된 경우 UPN ID가 있는 EndPointAddress 클래스의 인스턴스를 만들고 지문 확인을 처리하는 사용자 지정 코드를 제공합니다. |
이벤트 로깅 대한 부분 신뢰 지원 부분 신뢰는 이제 제한된 이벤트 로깅을 지원합니다. 서비스 활성화 오류, 추적 오류 및 로깅 실패만 이벤트 로그에 기록됩니다. 이벤트 로그에 과도한 메시지를 쓰지 않도록 하려면 프로세스에서 기록할 수 있는 최대 이벤트 수는 5개입니다. 수정할 필요가 없습니다. |
remoteEndpointMessageProperty 가용성 IIS에서 호스트되는 HTTP를 사용할 때 RemoteEndpointMessageProperty 클래스의 인스턴스에 액세스하는 것은 현재 활성 요청이 있는 것에 따라 달라집니다. 따라서 요청이 완료된 후에는 가져올 수 없습니다(예: 단방향 수신을 수행할 때). 수정할 필요가 없습니다. |
참고: 일부 애플리케이션에 중요한 최신 문제를 해결하기 위해 Microsoft는 중요한 Windows 업데이트에 포함될 수 있는 NET Framework 3.5 SP1 업데이트를 제공할 계획입니다. 이 업데이트에 대한 자세한 내용은 Microsoft 다운로드 센터의 .NET Framework 3.5 SP1 다운로드 페이지에서 확인할 수 있습니다.
참고 항목
.NET Framework 버전 및 어셈블리 정보