이 문서에서는 수정 사항, 표준 준수 및 보안에 대한 변경 내용, 고객 피드백에 따른 변경 내용을 포함하여 .NET Framework 버전 3.5 서비스 팩 1과 .NET Framework 버전 4 간의 마이그레이션 문제를 설명합니다. 이러한 변경 내용의 대부분은 애플리케이션에서 프로그래밍을 수정할 필요가 없습니다. 수정이 포함될 수 있는 항목은 테이블의 권장 변경 열을 참조하세요. 주목할 만한 변경 내용은 영역별로 세분화됩니다(예: ASP.NET 및 WPF(Windows Presentation Foundation)).
이 문서의 문제에 대한 자세한 개요는 .NET Framework 4에 대한 마이그레이션 가이드를 참조하세요.
새 기능에 대한 자세한 내용은 .NET Framework 4의 새로운 기능을 참조하세요.
ASP.NET 및 웹
네임스페이스: System.Web, System.Web.Mobile, System.Web.SecuritySystem.Web.UI.WebControls
어셈블리: System.Web(System.Web.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
브라우저 정의 파일 | 브라우저 정의 파일은 새 브라우저 및 업데이트된 브라우저 및 디바이스에 대한 정보를 포함하도록 업데이트되었습니다. 이전 브라우저와 Netscape Navigator와 같은 장치가 제거되었으며 Google Chrome 및 Apple iPhone과 같은 최신 브라우저 및 장치가 추가되었습니다. 애플리케이션에 제거된 브라우저 정의 중 하나에서 상속되는 사용자 지정 브라우저 정의가 포함되어 있으면 오류가 표시됩니다. HttpBrowserCapabilities 페이지 Request.Browse 속성에 의해 노출되는 개체는 브라우저 정의 파일에 의해 구동됩니다. 따라서 ASP.NET 4에서 이 개체의 속성에 액세스하여 반환되는 정보는 이전 버전의 ASP.NET 반환된 정보와 다를 수 있습니다. |
애플리케이션이 이전 브라우저 정의 파일을 사용하는 경우 다음 폴더에서 복사할 수 있습니다. Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers 파일을 ASP.NET 4의 해당 \CONFIG\Browsers 폴더에 복사합니다. 파일을 복사한 후 Aspnet_regbrowsers.exe 명령줄 도구를 실행합니다. 자세한 내용은 웹 사이트를 참조하세요 https://www.asp.net/mobile . |
혼합 버전의 ASP.NET 실행 중인 자식 애플리케이션 | ASP.NET 이전 버전의 ASP.NET 실행하는 애플리케이션의 자식으로 구성된 4개의 애플리케이션은 구성 또는 컴파일 오류로 인해 시작되지 않을 수 있습니다. 발생하는 특정 오류는 애플리케이션이 IIS 6.0에서 실행되는지 또는 IIS 7 또는 IIS 7.5에서 실행되는지에 따라 달라집니다. | 구성 시스템에서 ASP.NET 4 애플리케이션을 올바르게 인식하도록 영향을 받는 애플리케이션의 구성 파일을 변경할 수 있습니다. 변경해야 하는 사항에 대한 정보는 ASP.NET 웹 사이트의 문서 ASP.NET 4 Breaking Changes의 "ASP.NET 4 자식 응용 프로그램이 ASP.NET 2.0 또는 ASP.NET 3.5 응용 프로그램 아래에서 시작되지 않는 경우" 섹션을 참조하세요. |
ClientID 변경 내용 | ASP.NET 4의 새 clientIDMode 설정을 사용하면 ASP.NET HTML 요소에 id 대한 특성을 생성하는 방법을 지정할 수 있습니다. 이전 버전의 ASP.NET의 기본 동작은 AutoID 설정과 clientIDMode 에 해당합니다. 기본 설정은 이제 Predictable . 자세한 내용은 ASP.NET 웹 서버 컨트롤 식별을 참조하세요. |
Visual Studio를 사용하여 ASP.NET 2.0 또는 ASP.NET 3.5에서 애플리케이션을 업그레이드하는 경우 도구는 이전 버전의 .NET Framework의 동작을 유지하는 설정을 Web.config 파일에 자동으로 추가합니다. 그러나 IIS에서 애플리케이션 풀을 .NET Framework 4를 대상으로 변경하여 애플리케이션을 업그레이드하는 경우 ASP.NET 기본적으로 새 모드를 사용합니다. 새 클라이언트 ID 모드를 사용하지 않도록 설정하려면 Web.config 파일에 다음 설정을 추가합니다.<pages clientIDMode="AutoID" /> |
CAS(코드 액세스 보안) | ASP.NET 3.5에 추가된 ASP.NET 2.0 NET 기능은 .NET Framework 1.1 및 .NET Framework 2.0 CAS(코드 액세스 보안) 모델을 사용합니다. 그러나 ASP.NET 4에서 CAS의 구현은 실질적으로 정비되었습니다. 따라서 전역 어셈블리 캐시에서 실행되는 신뢰할 수 있는 코드를 사용하는 부분 신뢰 ASP.NET 애플리케이션은 다양한 보안 예외로 인해 실패할 수 있습니다. 부분 신뢰 애플리케이션이 머신 CAS 정책에 대한 광범위한 수정을 의존할 경우, 실패하고 보안 예외를 발생시킬 수 있습니다. | 다음 예제와 같이 구성 요소의 새 legacyCasModel 특성을 trust 사용하여 부분 신뢰 ASP.NET 4개 애플리케이션을 ASP.NET 1.1 및 2.0의 동작으로 되돌릴 수 있습니다.<trust level= "Medium" legacyCasModel="true" /> 중요: 이전 CAS 모델로 되돌리면 보안이 저하될 수 있습니다. 새 ASP.NET 4 코드 액세스 보안 모델에 대한 자세한 내용은 ASP.NET 4 애플리케이션의 코드 액세스 보안을 참조하세요. |
구성 파일 | .NET Framework 및 ASP.NET 4용 루트 구성 파일(machine.config 파일 및 루트 Web.config 파일)은 ASP.NET 3.5의 애플리케이션 Web.config 파일에 있는 대부분의 상용구 구성 정보를 포함하도록 업데이트되었습니다. 관리되는 IIS 7 및 IIS 7.5 구성 시스템의 복잡성 때문에 ASP.NET 4 및 IIS 7 및 IIS 7.5에서 ASP.NET 3.5 애플리케이션을 실행하면 ASP.NET 오류 또는 IIS 오류가 발생할 수 있습니다. | Visual Studio에서 프로젝트 업그레이드 도구를 사용하여 ASP.NET 3.5 애플리케이션을 ASP.NET 4로 업그레이드합니다. Visual Studio 2010은 ASP.NET 4에 대한 적절한 설정을 포함하도록 ASP.NET 3.5 애플리케이션의 Web.config 파일을 자동으로 수정합니다. 그러나 다시 컴파일하지 않고 .NET Framework 4를 사용하여 ASP.NET 3.5 애플리케이션을 실행할 수 있습니다. 이 경우 .NET Framework 4 및 IIS 7 또는 IIS 7.5에서 애플리케이션을 실행하기 전에 애플리케이션의 Web.config 파일을 수동으로 수정해야 할 수 있습니다. 특정 변경 사항은 SP(서비스 팩) 릴리스를 포함하여 작업 중인 소프트웨어의 조합에 따라 달라집니다. 이 변경의 영향을 받는 가능한 소프트웨어 조합 및 특정 조합의 문제를 해결하는 방법에 대한 자세한 내용은 ASP.NET 웹 사이트의 문서 ASP.NET 4 호환성이 손상되는 변경 내용의 "새 ASP.NET 4 루트 구성과 관련된 구성 오류" 섹션을 참조하세요. |
렌더링 제어 | 이전 버전의 ASP.NET 일부 컨트롤은 사용하지 않도록 설정할 수 없는 태그를 내보냅니다. 기본적으로 이 유형의 태그는 더 이상 ASP.NET 4에서 생성되지 않습니다. 렌더링 변경 내용은 다음 컨트롤에 영향을 줍니다. * Image 및 ImageButton 컨트롤은 더 이상 border="0" 특성을 렌더링하지 않습니다.BaseValidator * 파생되는 클래스 및 유효성 검사 컨트롤은 더 이상 기본적으로 빨간색 텍스트를 렌더링하지 않습니다.* HtmlForm 컨트롤이 name 특성을 렌더링하지 않습니다.컨트롤은 더 이상 Table 속성을 border="0" 렌더링하지 않습니다.사용자 입력을 위해 디자인되지 않은 컨트롤(예: Label 컨트롤)은 해당 disabled="disabled" 속성이 Enabled 로 설정되어 있는 경우(또는 컨테이너 컨트롤에서 이 설정을 상속받은 경우) false 특성을 더 이상 표시하지 않습니다. |
Visual Studio를 사용하여 ASP.NET 2.0 또는 ASP.NET 3.5에서 애플리케이션을 업그레이드하는 경우 도구는 레거시 렌더링을 유지하는 Web.config 파일에 설정을 자동으로 추가합니다. 그러나 IIS에서 애플리케이션 풀을 .NET Framework 4를 대상으로 변경하여 애플리케이션을 업그레이드하는 경우 ASP.NET 기본적으로 새 렌더링 모드를 사용합니다. 새 렌더링 모드를 사용하지 않도록 설정하려면 Web.config 파일에 다음 설정을 추가합니다.<pages controlRenderingCompatibilityVersion="3.5" /> |
기본 문서의 이벤트 처리기 | ASP.NET 4는 기본 문서가 매핑된 확장 없는 URL에 대한 요청이 수행되면 HTML form 요소의 action 특성 값을 빈 문자열로 렌더링합니다. 이전 ASP.NET 릴리스에서는 http://contoso.com 에 대한 요청이 Default.aspx에 대한 요청을 발생시켰습니다. 해당 문서에서 여 form 는 태그는 다음 예제와 같이 렌더링됩니다.<form action="Default.aspx" /> ASP.NET 4에서는 http://contoso.com 에 대한 요청이 Default.aspx에 대한 요청으로 이어집니다. 그러나 ASP.NET은 이제 다음 예제와 같이 HTML 열기 태그 form 를 렌더링합니다.<form action="" /> 특성이 action 빈 문자열이면 IIS DefaultDocumentModule 개체는 Default.aspx 자식 요청을 만듭니다. 대부분의 조건에서 이 자식 요청은 애플리케이션 코드에 투명하며 Default.aspx 페이지가 정상적으로 실행됩니다. 그러나 관리 코드와 IIS 7 또는 IIS 7.5 통합 모드 간의 잠재적 상호 작용으로 인해 자식 요청 중에 관리되는 .aspx 페이지가 제대로 작동하지 않을 수 있습니다. 다음 조건이 발생하면 기본 .aspx 문서에 대한 자식 요청으로 인해 오류가 발생하거나 예기치 않은 동작이 발생합니다.* 요소의 form 특성이 ""로 설정된 브라우저로 action .aspx 페이지가 전송됩니다.* 양식이 ASP.NET으로 다시 전송됩니다. * 관리되는 HTTP 모듈은 엔터티 본문의 일부를 읽습니다(예: Request.Form 또는 Request.Params ). 이렇게 하면 POST 요청의 엔터티 본문을 관리되는 메모리로 읽습니다. 따라서 엔터티 본문은 IIS 7 또는 IIS 7.5 통합 모드에서 실행되는 네이티브 코드 모듈에서 더 이상 사용할 수 없습니다.* IIS DefaultDocumentModule 개체가 결국 실행되고 Default.aspx 문서에 대한 자식 요청을 만듭니다. 그러나 엔터티 본문은 관리 코드에 의해 이미 읽혔기 때문에 자식 요청으로 보낼 엔터티 본문이 존재하지 않습니다.* 자식 요청에 대해 HTTP 파이프라인이 실행되면 처리기 실행 단계에서 .aspx 파일에 대한 처리기가 실행됩니다. 엔터티 본문이 없으므로 폼 변수와 뷰 상태가 없습니다. 따라서 .aspx 페이지 처리기에서 발생해야 하는 이벤트(있는 경우)를 결정하는 데 사용할 수 있는 정보가 없습니다. 따라서 영향을 받는 .aspx 페이지에 대한 포스트백 이벤트 처리기가 실행되지 않습니다. |
이 변경으로 인해 발생할 수 있는 문제를 해결하는 방법에 대한 자세한 정보는 ASP.NET 웹 사이트의 문서 ASP.NET 4 변경 사항에서 "IIS 7 또는 IIS 7.5 통합 모드에서 기본 문서에 이벤트 처리기가 호출되지 않을 수 있음"을 참조하세요. |
해시 알고리즘 | ASP.NET 암호화 및 해시 알고리즘을 모두 사용하여 양식 인증 쿠키 및 상태 보기와 같은 데이터를 보호합니다. 기본적으로 ASP.NET 4는 쿠키 및 뷰 상태에 대한 해시 작업에 알고리즘을 사용합니다 HMACSHA256 . 이전 버전의 ASP.NET 이전 HMACSHA1 알고리즘을 사용했습니다. | 양식 인증 쿠키와 같은 데이터가 .NET Framework 버전에서 작동해야 하는 ASP.NET 2.0 및 ASP.NET 4를 혼합하는 애플리케이션을 실행하는 경우 Web.config 파일에 다음 설정을 추가하여 이전 HMACSHA1 알고리즘을 사용하도록 ASP.NET 4 웹 애플리케이션을 구성합니다.<machineKey validation="SHA1" /> |
Internet Explorer에서 컨트롤 호스팅 | 웹에서 컨트롤을 호스팅하는 더 나은 솔루션이 있으므로 Internet Explorer에서 Windows Forms 컨트롤을 더 이상 호스트할 수 없습니다. 따라서 IEHost.dll 및 IEExec.exe 어셈블리가 .NET Framework에서 제거되었습니다. | 웹 애플리케이션에서 사용자 지정 컨트롤 개발을 위해 다음 기술을 사용할 수 있습니다. * Silverlight 애플리케이션을 만들고 브라우저 외부에서 실행되도록 구성할 수 있습니다. 자세한 내용은 브라우저 외부 지원을 참조하세요. * XBAP(XAML 브라우저 애플리케이션)를 빌드하여 WPF 기능을 활용할 수 있습니다(클라이언트 컴퓨터에서 .NET Framework 필요). 자세한 내용은 WPF XAML 브라우저 애플리케이션 개요를 참조하세요. |
HtmlEncode 및 UrlEncode 메서드 |
HtmlEncode 및 UrlEncode HttpUtility 클래스의 HttpServerUtility 메서드는 다음과 같이 작은따옴표 문자(')를 인코딩하도록 업데이트되었습니다.* 메서드는 HtmlEncode 작은따옴표의 인스턴스를 다음과 같이 인코딩합니다. ' * 메서드는 UrlEncode 작은따옴표의 인스턴스를 다음과 같이 인코딩합니다. %27 |
코드에서 HtmlEncode 및 UrlEncode 메서드를 사용하는 위치를 검사하고, 인코딩 변경으로 인해 애플리케이션에 영향을 미치는 변경이 발생하지 않도록 확인하세요. |
ASP.NET 2.0 애플리케이션의 HttpException 오류 | IIS 6에서 ASP.NET 4를 사용하도록 설정한 후 IIS 6에서 실행되는 ASP.NET 2.0 애플리케이션(Windows Server 2003 또는 Windows Server 2003 R2)에서 다음과 같은 오류가 발생할 수 있습니다. System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. |
* 웹 사이트를 실행하기 위해 ASP.NET 4가 필요하지 않은 경우 ASP.NET 2.0을 사용하도록 사이트를 다시 매핑합니다. -또는- * 웹 사이트를 실행하기 위해 ASP.NET 4가 필요한 경우 자식 ASP.NET 2.0 가상 디렉터리를 ASP.NET 2.0에 매핑된 다른 웹 사이트로 이동합니다. -또는- * 확장명 없는 URL을 사용하지 않도록 설정합니다. 자세한 내용은 ASP.NET 웹 사이트의 문서 ASP.NET 4 주요 변경 내용에서 "ASP.NET 2.0 애플리케이션에서 eurl.axd를 참조하는 HttpException 오류를 생성할 수 있음"을 참조하세요. |
멤버 자격 유형 | ASP.NET 멤버 자격에 사용되는 일부 형식(예: MembershipProvider)이 System.Web.dll에서 System.Web.ApplicationServices.dll 어셈블리로 이동하였습니다. 클라이언트의 형식과 확장된 .NET Framework SKU 간의 아키텍처 계층화 종속성을 확인하기 위해 형식이 이동되었습니다. | 이전 버전의 ASP.NET 업그레이드되었으며 이동된 멤버 자격 유형을 사용하는 클래스 라이브러리는 ASP.NET 4 프로젝트에서 사용할 때 컴파일하지 못할 수 있습니다. 그렇다면 클래스 라이브러리 프로젝트에 System.Web.ApplicationServices.dll에 대한 참조를 추가하십시오. |
메뉴 컨트롤 변경 내용 | 컨트롤을 변경하면 Menu 다음과 같은 동작이 발생합니다. * MenuRenderingMode이 List 으로 설정되거나, MenuRenderingMode이 Default 으로 설정되고 ControlRenderingCompatibilityVersion이 4.0 이상인 경우, PopOutImageUrl 속성은 영향을 미치지 않습니다.* 속성에 StaticPopOutImageUrlDynamicPopOutImageUrl 설정된 경로에 백슬래시(\)가 포함되어 있으면 이미지가 렌더링되지 않습니다. (이전 버전의 ASP.NET 경로에는 백슬래시를 포함할 수 있습니다.) |
* 개별 메뉴 항목의 PopOutImageUrl 속성을 설정하는 대신 부모 StaticPopOutImageUrl 컨트롤을 DynamicPopOutImageUrlMenu 설정합니다. -또는- MenuRenderingMode을 Table 로 설정하거나, MenuRenderingMode을 Default 로 설정하고 ControlRenderingCompatibilityVersion을 3.5 로 설정합니다. 이러한 설정으로 인해 컨트롤은 Menu 이전 버전의 ASP.NET 사용한 HTML 테이블 기반 레이아웃을 사용합니다.* 또는 StaticPopOutImageUrl 속성의 경로에 DynamicPopOutImageUrl 백슬래시(\)가 포함된 경우 슬래시 문자(/)를 대체합니다. |
Web.config 파일의 모바일 어셈블리 | 이전 버전의 ASP.NET System.Web.Mobile.dll 어셈블리에 대한 참조가 아래 섹션의 루트 Web.config 파일에 assemblies 포함되었습니다system.web /compilation . 성능을 향상시키기 위해 이 어셈블리에 대한 참조가 제거되었습니다.참고: System.Web.Mobile.dll 어셈블리 및 ASP.NET 모바일 컨트롤은 ASP.NET 4에 포함되지만 더 이상 사용되지 않습니다. |
이 어셈블리의 형식을 사용하려면 루트 Web.config 파일 또는 애플리케이션 Web.config 파일에서 어셈블리에 대한 참조를 추가합니다. |
출력 캐싱 | ASP.NET 1.0에서 버그로 인해 출력 캐시 설정으로 지정된 캐시된 Location="ServerAndClient" 페이지가 응답에서 Vary:* HTTP 헤더를 내보낸 것입니다. 이는 클라이언트 브라우저에 페이지를 로컬로 캐시하지 말라고 말하는 효과가 있었습니다. ASP.NET 1.1에서는 SetOmitVaryStar 메서드가 추가되었고, 이 메서드는 Vary:* 헤더를 표시하지 않도록 호출할 수 있습니다. 그러나 버그 보고서에 따르면 개발자는 기존 SetOmitVaryStar 동작을 인식하지 못합니다.ASP.NET 4 Vary:* 에서는 다음 지시문을 지정하는 응답에서 HTTP 헤더가 더 이상 내보내지지 않습니다.<%@ OutputCache Location="ServerAndClient" %> 따라서 SetOmitVaryStar 헤더를 없애기 위해 Vary:* 메서드가 더 이상 필요하지 않습니다. 특성에 대해 "ServerAndClient" Location 를 지정하는 애플리케이션에서는 호출 SetOmitVaryStar할 필요 없이 브라우저에서 페이지를 캐시할 수 있습니다. |
애플리케이션에서 페이지가 Vary:* 를 내보내야 할 경우, 다음 예제와 같이 AppendHeader 메서드를 호출하십시오.System.Web.HttpResponse.AppendHeader("Vary","*"); 또는 출력 캐싱 Location 특성의 값을 "Server"로 변경할 수 있습니다. |
페이지 파싱 | ASP.NET 웹 페이지(.aspx 파일) 및 사용자 컨트롤(.ascx 파일)의 페이지 파서는 ASP.NET 4에서 이전 버전의 ASP.NET 보다 더 엄격하며 이전 버전보다 더 많은 태그에 유효하지 않은 것으로 플래그를 지정합니다. | 페이지가 실행될 때 생성되는 오류 메시지를 검사하고 잘못된 태그로 인한 오류를 수정합니다. |
Passport 유형 | ASP.NET 2.0에 기본 제공되는 Passport 지원은 사용되지 않으며 Passport(현재 라이브 ID SDK)의 변경으로 인해 지원되지 않습니다. 따라서 Passport와 관련된 System.Web.Security 안의 형식이 이제 ObsoleteAttribute 속성으로 표시됩니다. |
System.Web.Security 네임스페이스에서 Passport 형식을 사용하는 모든 코드를 Windows Live ID SDK를 사용하도록 변경합니다 (예: PassportIdentity). |
FilePath 속성의 PathInfo 정보 | ASP.NET 4는 더 이상 PathInfo 값을 FilePath, AppRelativeCurrentExecutionFilePath, CurrentExecutionFilePath와 같은 속성의 반환 값에 포함하지 않습니다. 대신 PathInfo 정보는 PathInfo에서 사용할 수 있습니다. 예를 들어 다음 URL 조각을 가정해 보겠습니다./testapp/Action.mvc/SomeAction 이전 버전의 ASP.NET HttpRequest 속성에는 다음 값이 있습니다. * FilePath: /testapp/Action.mvc/SomeAction * PathInfo: (비어 있음) ASP.NET 4 HttpRequest 에서는 속성에 다음 값이 대신 있습니다. * FilePath: /testapp/Action.mvc * PathInfo: SomeAction |
경로 정보를 반환하기 위해 클래스의 HttpRequest 속성을 사용하는 위치에 대한 코드를 검사하고, 경로 정보가 반환되는 방식의 변경 내용을 반영하도록 코드를 변경합니다. |
요청 유효성 검사 | 요청 유효성 검사를 개선하기 위해 요청 수명 주기의 앞부분에서 ASP.NET 요청 유효성 검사가 호출됩니다. 결과적으로 요청 유효성 검사는 웹 서비스 호출 및 사용자 지정 처리기와 같이 .aspx 파일에 대해 실행되지 않는 요청에 대해 실행됩니다. 요청 유효성 검사는 사용자 지정 HTTP 모듈이 요청 처리 파이프라인에서 실행되는 경우에도 활성화됩니다. 이 변경으로 인해 .aspx 파일 이외의 리소스에 대한 요청은 요청 유효성 검사 오류를 throw할 수 있습니다. 요청 파이프라인에서 실행되는 사용자 지정 코드(예: 사용자 지정 HTTP 모듈)도 요청 유효성 검사 오류를 throw할 수 있습니다. |
필요한 경우 웹 구성 파일에서 다음 설정을 사용하여 요청 유효성 검사를 트리거하는 .aspx 페이지만 있는 이전 동작으로 되돌릴 수 있습니다.<httpRuntime requestValidationMode="2.0" /> 경고: 이전 동작으로 되돌리는 경우 기존 처리기, 모듈 및 기타 사용자 지정 코드의 모든 코드가 XSS 공격 벡터일 수 있는 잠재적으로 안전하지 않은 HTTP 입력에 대한 검사를 수행하는지 확인합니다. |
라우팅 | Visual Studio 2010에서 파일 시스템 웹 사이트를 만들고 웹 사이트가 폴더 이름에 점(.)이 포함된 폴더에 있는 경우 URL 라우팅이 안정적으로 작동하지 않습니다. 일부 가상 경로에서 HTTP 404 오류가 반환됩니다. 이는 Visual Studio 2010이 루트 가상 디렉터리에 대한 잘못된 경로를 사용하여 Visual Studio 개발 서버를 시작하므로 발생합니다. | * 파일 기반 웹 사이트의 속성 페이지에서 가상 경로 특성을 "/"로 변경합니다. -또는- * 웹 사이트 프로젝트 대신 웹 애플리케이션 프로젝트를 만듭니다. 웹 애플리케이션 프로젝트에는 이 문제가 없으며, 프로젝트 폴더의 이름에 점이 있더라도 URL 라우팅이 작동합니다. -또는- * IIS에서 호스트되는 HTTP 기반 웹 사이트를 만듭니다. IIS 호스팅 웹 사이트에는 가상 경로와 프로젝트 파일 폴더에 점이 있을 수 있습니다. |
SharePoint 사이트 | 명명 WSS_Minimal 된 사용자 지정 부분 신뢰 수준이 포함된 SharePoint 웹 사이트의 자식으로 배포된 ASP.NET 4 웹 사이트를 실행하려고 하면 다음 오류가 표시됩니다.Could not find permission set named 'ASP.Net'. |
현재 SharePoint 버전이 ASP.NET 호환되지 않습니다. 따라서 sharePoint 웹 사이트의 자식으로 ASP.NET 4 웹 사이트를 실행하려고 시도해서는 안 됩니다. |
XHTML 1.1 표준 | 새 웹 사이트에 XHTML 1.1 규정 준수를 사용하도록 설정하기 위해 .NET Framework 4의 ASP.NET 컨트롤은 XHTML 1.1 호환 HTML을 생성합니다. 이 렌더링은 요소 내의 Web.config 파일에서 다음 옵션을 사용하여 사용하도록 설정됩니다 <system.Web> .<pages controlRenderingCompatibilityVersion="4.0"/> 이 옵션은 기본적으로 4.0으로 설정됩니다. Visual Studio 2008에서 업그레이드된 웹 프로젝트에는 호환성을 위해 3.5 설정이 활성화되어 있습니다. |
없음. |
코어
일반 기능
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
CardSpace | Windows CardSpace는 더 이상 .NET Framework에 포함되지 않습니다. 별도로 제공됩니다. | Microsoft 다운로드 센터에서 Windows CardSpace를 다운로드합니다. |
구성 파일 | .NET Framework에서 애플리케이션 구성 파일에 액세스하는 방법을 수정했습니다. | 애플리케이션 구성 파일의 이름이 application-name.config인 경우, application-name.exe.config으로 변경하십시오. 예를 들어, MyApp.config를 MyApp.exe.config으로 이름을 바꾸십시오. |
C# 코드 컴파일러 |
Compiler 네임스페이스에 있던 CompilerError , ErrorLevel 및 Microsoft.CSharp 클래스는 더 이상 사용할 수 없으며 해당 어셈블리(cscompmgd.dll)는 더 이상 .NET Framework에 포함되지 않습니다. |
CodeDomProvider 클래스 및 기타 클래스를 System.CodeDom.Compiler 네임스페이스에서 사용합니다. 자세한 내용은 CodeDOM 사용을 참조하세요. |
호스팅 (관리되지 않는 API) | 호스팅 기능을 개선하기 위해 일부 호스팅 활성화 API는 더 이상 사용되지 않습니다. In-Process 병렬 실행 기능을 사용하면 애플리케이션이 동일한 프로세스에서 여러 버전의 .NET Framework를 로드하고 시작할 수 있습니다. 예를 들어 동일한 프로세스에서 .NET Framework 2.0 SP1 및 .NET Framework 4를 기반으로 하는 추가 기능을 기반으로 하는 추가 기능(또는 구성 요소)을 로드하는 애플리케이션을 실행할 수 있습니다. 이전 구성 요소는 이전 .NET Framework 버전을 계속 사용하고 새 구성 요소는 새 .NET Framework 버전을 사용합니다. | In-Process 병렬 실행에 설명된 구성을 사용합니다. |
새 보안 모델 | .NET Framework 4의 보안 변경 내용에 설명된 대로 CAS(코드 액세스 보안) 정책이 해제되고 간소화된 모델로 대체되었습니다. | 애플리케이션에서 CAS를 사용하는 경우 수정이 필요할 수 있습니다. 자세한 내용은 코드 액세스 보안 정책 호환성 및 마이그레이션을 참조하세요. |
날짜 및 시간
네임스페이스: System
어셈블리: mscorlib(in mscorlib.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
일광 절약 | 시스템 클록과 일치하기 위해 시간 속성(예: Local 및 Now)은 이제 일광 절약 시간 작업에 다른 .NET Framework 데이터 대신 운영 체제 규칙을 사용합니다. | 없음. |
문자열 서식 지정 | 문화권에 민감한 서식을 지원하기 위해 TimeSpan 구조에는 ToString , Parse , 및 TryParse 메서드의 새로운 오버로드뿐만 아니라 새롭게 추가된 ParseExact 및 TryParseExact 메서드가 포함됩니다. |
없음. |
세계화
새로운 중립 및 특정 문화권 목록을 보려면 세계화 및 지역화의 새로운 정보를 참조하십시오.
네임스페이스: System.Globalization
어셈블리: mscorlib(in mscorlib.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
문화권 이름 | 다음 이름 변경은 독일어, 디비 및 아프리카 문화권에 영향을 줍니다. * CurrencyEnglishName: 독일(스위스)(de-CH) 문화권의 통화 이름이 "sFr"에서 "Fr"으로 변경되었습니다. * LongDatePattern: Divehi(몰디브)(dv-MV) 문화권의 긴 날짜 패턴이 "dd/MMMM/yyyy"에서 "dd/MM/yyyy"로 변경되었습니다. * PMDesignator: 아프리칸스(남아프리카 공화국)(af-ZA) 문화권의 P.M. 지정자가 "nm"에서 "PM"으로 변경되었습니다. |
문화권 이름 변경에 주의하세요. |
LCID 매개 변수 | 자동화 서버 설정에서 예상되는 동작과 일치하기 위해 CLR은 더 이상 매개 변수의 LCID 현재 문화권을 관리되지 않는 COM 기반 애플리케이션에 전달하지 않습니다. 대신 문화 코드로 1033(en-us)을 전달합니다. |
지정된 문화권이 필요한 네이티브 애플리케이션을 제외하고는 수정이 필요하지 않습니다. |
구식의 문화 유형 |
CultureTypes 문화권 유형과 CultureTypes 문화권 유형은 이제는 구식입니다. 이전 버전과의 호환성을 위해, CultureTypes는 이전 .NET Framework에 포함된 중립 및 특정 문화권을 이제 반환하며, CultureTypes는 빈 목록을 반환합니다. |
열거형의 CultureTypes 다른 값을 사용합니다. |
문화 획득 | Windows 7부터 .NET Framework 4는 데이터 자체를 저장하는 대신 운영 체제에서 문화권 정보를 검색합니다. 또한 .NET Framework는 데이터를 정렬하고 대/소문자 구분하기 위해 Windows와 동기화합니다. | 없음. |
유니코드 5.1 표준 | .NET Framework는 이제 약 1,400자를 추가하여 모든 유니코드 5.1자를 지원합니다. 추가 문자에는 새로운 기호, 화살표, 발음, 문장 부호, 수학적 기호, CJK 스트로크 및 표기법, 추가 말라얄람어 및 텔루구어 숫자 문자, 다양한 미얀마어, 라틴어, 아랍어, 그리스어, 몽골어 및 키릴 자모 문자가 포함됩니다. 유니코드 5.1에서 지원되는 새로운 스크립트는 Sundanese, Lepcha, Ol Chiki, Vai, Saurashtra, Kayah Li, Rejang, Gurmukhi, Odia, Tamil, Telugu 및 Malayalam 문자 및 참입니다. | 없음. |
예외
네임스페이스: System, System.Runtime.ExceptionServices
어셈블리: mscorlib(in mscorlib.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
손상된 프로세스 상태에 대한 예외 | CLR은 더 이상 손상된 프로세스 상태에 대한 예외를 관리 코드의 예외 처리기에 제공하지 않습니다. | 이러한 예외는 프로세스의 상태가 손상되었음을 나타냅니다. 이 상태에서 애플리케이션을 실행하는 것은 권장되지 않습니다. 자세한 내용은 MSDN 잡지의 HandleProcessCorruptedStateExceptionsAttribute 및 손상된 상태 예외 처리 항목을 참조하세요. |
실행 엔진 예외 | ExecutionEngineException 는 이제 사용되지 않습니다. 이는 포착 가능한 예외로 인해 불안정한 프로세스가 계속 실행될 수 있기 때문입니다. 이러한 변경으로 런타임의 예측 가능성과 안정성이 향상됩니다. | 조건을 InvalidOperationException 신호로 보낼 수 있습니다. |
성찰
네임스페이스: System.Reflection
어셈블리: mscorlib(in mscorlib.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
어셈블리 해시 알고리즘 | 어셈블리가 로드되지 않은 경우 런타임이 참조된 어셈블리의 해시 알고리즘을 알 수 없기 때문에 이제 HashAlgorithm 속성이 AssemblyHashAlgorithm을 반환합니다. 이는 GetReferencedAssemblies 메서드가 반환한 것과 같은 참조된 어셈블리에서 속성을 사용하는 것을 의미합니다. | 없음. |
어셈블리 로딩 | 어셈블리의 중복 로드를 방지하고 가상 주소 공간을 절약하기 위해 CLR은 이제 Win32 MapViewOfFile 함수만 사용하여 어셈블리를 로드합니다. 더 이상 LoadLibrary 함수도 호출하지 않습니다.이 변경은 다음과 같은 방법으로 진단 애플리케이션에 영향을 줍니다. * A ProcessModuleCollection 는 호출 Process.GetCurrentProcess().Modules 에서 가져온 클래스 라이브러리(.dll 파일)의 모듈을 더 이상 포함하지 않습니다.* EnumProcessModules 함수를 사용하는 Win32 애플리케이션은 모든 관리 모듈이 나열되지 않습니다. |
없음. |
형식 선언 | 이제 형식에 DeclaringType 선언 형식이 없는 경우 속성이 null을 올바르게 반환합니다. | 없음. |
대표자 | 대리자 생성자에 null 값이 전달될 때, 대리자는 이제 ArgumentNullException를 던지며, 대신에 NullReferenceException를 던집니다. | 예외 처리가 발생할 경우 이를 적절히 포착하는지 확인하십시오 ArgumentNullException. |
전역 어셈블리 캐시 위치 변경 | .NET Framework 4 어셈블리의 경우 전역 어셈블리 캐시가 Windows 디렉터리(%WINDIR%)에서 Microsoft.Net 하위 디렉터리(%WINDIR%\Microsoft.Net)로 이동되었습니다. 이전 버전의 어셈블리는 이전 디렉터리에 남아 있습니다. 관리되지 않는 ASM_CACHE_FLAGS 열거형에는 새 ASM_CACHE_ROOT_EX 플래그가 포함됩니다. 이 플래그는 GetCachePath 함수에서 가져올 수 있는 .NET Framework 4 어셈블리의 캐시 위치를 가져옵니다. |
애플리케이션이 어셈블리에 대한 명시적 경로를 사용하지 않는다고 가정하면 문제가 없습니다. 명시적 경로 사용은 권장되지 않습니다. |
전역 어셈블리 캐시 도구 | Gacutil.exe(전역 어셈블리 캐시 도구)는 더 이상 셸 플러그 인 뷰어를 지원하지 않습니다. | 없음. |
상호 운용성
네임스페이스: System.Runtime.InteropServices
어셈블리: mscorlib(in mscorlib.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
버퍼 길이 (관리되지 않는 API) | 메모리를 절약하기 위해 pBufferLengthOffset 매개 변수의 기능이 매개 변수와 일치하도록 pStringLengthOffset 메서드에 변경되었습니다. 이제 두 매개 변수 모두 문자열 길이의 오프셋 위치를 가리킵니다. 버퍼 길이가 문자열 클래스의 표현에서 제거되었습니다. |
버퍼 길이에 대한 종속성을 제거합니다. |
JIT 디버깅 | JIT(Just-In-Time) 디버깅에 대한 등록을 간소화하기 위해 .NET Framework 디버거는 이제 네이티브 코드에 대한 JIT 디버깅 동작을 제어하는 AeDebug 레지스트리 키만 사용합니다. 이렇게 변경하면 다음과 같은 결과가 발생합니다. * 관리 코드와 네이티브 코드에 대해 두 개의 서로 다른 디버거를 더 이상 등록할 수 없습니다. * 비대화형 프로세스에 대해 더 이상 디버거를 자동으로 시작할 수 없지만 사용자에게 대화형 프로세스를 요청하는 메시지를 표시할 수 있습니다. * 디버거가 시작되지 않거나 시작해야 하는 등록된 디버거가 없을 때 더 이상 알림이 표시되지 않습니다. * 애플리케이션의 상호 작용에 의존하는 자동 시작 정책은 더 이상 지원되지 않습니다. |
필요에 따라 디버깅 작업을 조정합니다. |
플랫폼 호출 | 관리되지 않는 코드와의 상호 운용성에서 성능을 향상시키기 위해 플랫폼 호출의 잘못된 호출 규칙으로 인해 애플리케이션이 실패합니다. 이전 버전에서 마샬링 계층은 스택에서 이러한 오류를 해결했습니다. | Microsoft Visual Studio에서 애플리케이션을 디버깅하면 이러한 오류를 수정할 수 있도록 경고합니다. 업데이트할 수 없는 이진 파일이 있는 경우 애플리케이션의 구성 파일에 NetFx40_PInvokeStackResilience< 요소를 포함>하여 호출 오류를 이전 버전과 같이 스택에서 해결할 수 있도록 할 수 있습니다. 그러나 이는 애플리케이션의 성능에 영향을 줄 수 있습니다. |
제거된 인터페이스 (관리되지 않는 API) | 개발자 혼동을 방지하기 위해 유용한 런타임 시나리오를 제공하지 않았고 CLR에서 구현을 제공하거나 수락하지 않았기 때문에 다음 인터페이스가 제거되었습니다. * INativeImageINativeImageDependency * INativeImageInstallInfo * INativeImageEvaluate * INativeImageConverter * ICorModule * IMetaDataConverter |
없음. |
데이터
이 섹션에서는 데이터 집합 및 SQL 클라이언트, Entity Framework, LINQ to SQL 및 WCF 데이터 서버(이전의 ADO.NET Data Services)를 사용하기 위한 마이그레이션 문제에 대해 설명합니다.
DataSet 및 SQL 클라이언트
다음 표에서는 이전에 제한 사항 또는 기타 문제가 있었던 기능의 향상된 기능을 설명합니다.
네임스페이스: System.Data, System.Data.Objects.DataClasses, System.Data.SqlClient
어셈블리: System.Data(System.Data.dll), System.Data.Entity(System.Data.Entity.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
POCO 시나리오 | 인터페이스에는 IRelatedEnd POCO(Plain Old CLR Object) 시나리오에서 유용성을 향상시키는 새로운 메서드가 있습니다. 이러한 새 메서드는 Object 엔터티 대신 IEntityWithRelationships 매개 변수로 사용합니다. |
행 편집 | 클래스에서 IndexOf 구현한 것처럼 메서드는 DataView 이제 -1을 반환하는 대신 편집 중인 행의 값을 올바르게 반환합니다. |
이벤트 | PropertyChanged 이제 행이 수정된 상태이고 RejectChanges 메서드가 호출될 때 이벤트가 발생합니다. 이렇게 변경하면 개체의 콘텐츠를 노출하는 UI 컨트롤을 더 쉽게 만들 수 DataSet 있습니다. |
예외 | 이제 메서드는 연결이 설정되지 않거나 열리지 않은 경우 Prepare 대신에 InvalidOperationException를 throw합니다. |
매핑 보기 | 이제 쿼리 뷰 매핑 오류는 런타임에 throw 되는 대신 디자인 타임에 NullReferenceException 오류가 catch됩니다. 매핑 유효성 검사는 이제 CSDL(개념 스키마)의 두 연관 집합이 동일한 열에 매핑되는 오류를 포착합니다. |
트랜잭션 | 트랜잭션이 완료된 후(중단 또는 롤백 포함) 애플리케이션이 연결에서 명령문을 실행하려고 하면, 이제 InvalidOperationException가 throw됩니다. 이전 버전에서는 예외를 throw하지 않았으며 트랜잭션이 중단된 경우에도 추가 명령을 실행할 수 있습니다. |
엔티티 프레임워크
다음 표에서는 이전에 제한 사항 또는 기타 문제가 있었던 기능의 향상된 기능을 설명합니다.
네임스페이스: System.Data, System.Data.Objects, System.Data.Objects.DataClasses
어셈블리: System.Data.Entity(System.Data.Entity.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
엔터티 객체 | 메서드가 호출될 때 Detach 메서드와 엔터티 개체의 상태 간에 이제 패리티가 생깁니다. 이 향상된 일관성은 예기치 않은 오류가 던져지지 않도록 막습니다. |
Entity SQL | Entity SQL의 식별자 확인에 대한 규칙이 개선되었습니다. 엔터티 SQL 파서가 다중 파트 식별자를 확인하기 위한 논리를 개선했습니다. |
구조적 주석 | 이제 Entity Framework는 구조적 주석을 인식합니다. |
쿼리 | 쿼리에서 다음과 같은 개선 사항이 수행되었습니다.GroupBy * 빈 컬렉션에 null 키를 사용하는 쿼리는 쿼리에 추가 선택 항목이 있는지 여부와 관계없이 행을 반환하지 않습니다.* LINQ 및 Entity-SQL 쿼리에서 생성된 SQL은 이제 문자열 매개 변수를 기본적으로 유니코드가 아닌 값으로 처리합니다. |
LINQ to SQL
다음 표에서는 이전에 제한 사항 또는 기타 문제가 있었던 기능의 향상된 기능을 설명합니다.
네임스페이스: System.Data.Linq
어셈블리: System.Data.Linq(System.Data.Linq.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
이벤트 | EntitySet<TEntity> 컬렉션이 로드될 때뿐만 아니라, ListChanged이 언로드될 경우도 추가 및 제거 연산에 대해 EntitySet<TEntity> 이벤트가 발생합니다. |
쿼리 |
Skip(0) 는 LINQ to SQL 쿼리에서 더 이상 무시되지 않습니다. 따라서 이 메서드가 있는 쿼리는 다르게 동작할 수 있습니다. 예를 들어, 경우에 따라 OrderBy 절이 필요하며, Skip(0) 절이 포함되지 않은 경우 쿼리가 NotSupportedException 예외를 OrderBy throw하게 됩니다. |
WCF Data Services
다음 표에서는 이전에 제한 사항 또는 기타 문제가 있었던 기능의 향상된 기능을 설명합니다.
네임스페이스: System.Data.Services, System.Data.Services.Client, System.Data.Services.CommonSystem.Data.Services.Providers
어셈블리: System.Data.Services(System.Data.Services.dll), System.Data.Services.Client(System.Data.Services.Client.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
일괄 처리된 이진 콘텐츠 | 이제 WCF Data Services는 요청 및 응답에서 일괄 처리된 이진 콘텐츠를 지원합니다. |
인터셉터 변경 | 이제 삭제 요청에 대해 변경 인터셉터가 실행됩니다. 변경 인터셉터란 엔터티 집합의 엔터티를 수정하기 위해 서버에서 요청을 받을 때마다 실행되는 메서드입니다. 들어오는 요청이 실행되기 전에 실행됩니다. 변경 인터셉터를 사용하면 변경 중인 엔터티 및 해당 엔터티에서 수행되는 작업에 액세스할 수 있습니다. |
예외 | 이제 다음 조건에서 NullReferenceException 대신 더 유용한 예외가 발생합니다. TimeoutException* 데이터 서비스에 대한 호출 시간이 초과되는 경우입니다. DataServiceRequestException* 데이터 서비스에 잘못된 요청이 있는 경우입니다. 애플리케이션에서 새 예외를 catch하도록 예외 처리를 변경해야 합니다. |
헤더 | 헤더가 다음과 같이 개선되었습니다. * WCF Data Services는 이제 지정되지 않은 값이 있는 헤더를 올바르게 거부 eTag 합니다.* WCF Data Services는 이제 오류를 반환하고 헤더가 요청에 있을 때 if-* 링크에 대한 삭제 요청에 대한 요청을 실행하지 않습니다.* WCF Data Services는 이제 클라이언트가 Accept 헤더에 지정한 형식(Atom, JSON)으로 클라이언트에 오류를 반환합니다. |
JSON 판독기 | 이제 JSON(JavaScript Object Notation) 판독기는 WCF Data Service로 전송된 JSON 페이로드를 처리할 때 단일 백슬래시("\") 이스케이프 문자를 읽을 때 오류를 올바르게 반환합니다. |
병합 |
MergeOption 열거형은 다음과 같은 개선 사항이 적용되었습니다. MergeOption* 병합 옵션은 데이터 서비스의 후속 응답 결과로 클라이언트의 엔터티를 더 이상 수정하지 않습니다. * 이제 동적 MergeOption SQL과 저장 프로시저 기반 업데이트 간에 옵션이 일관됩니다. |
요청 | OnStartProcessingRequest 이제 데이터 서비스에 대한 요청이 처리되기 전에 메서드가 호출됩니다. 이렇게 하면 요청이 서비스에 대해 올바르게 ServiceOperation 작동할 수 있습니다. |
스트림 | WCF Data Services는 더 이상 읽기 및 쓰기 작업을 위해 기본 스트림을 닫지 않습니다. |
URI | WCF Data Services 클라이언트에 의한 URI 이스케이프가 수정되었습니다. |
WCF(Windows Communication Foundation)
다음 표에서는 이전에 제한 사항 또는 기타 문제가 있었던 기능의 향상된 기능을 설명합니다.
특징 | 3.5 SP1의 차이점 |
---|---|
구성 파일 | 구성 파일 계층 구조를 통해 동작 상속을 사용하도록 설정하기 위해 WCF는 이제 구성 파일 간 병합을 지원합니다. 이제 사용자가 컴퓨터에서 실행 중인 모든 서비스에 적용할 동작을 정의할 수 있도록 구성 상속 모델이 확장되었습니다. 계층 구조의 다른 수준에서 이름이 같은 동작이 있는 경우 동작이 변경될 수 있습니다. |
서비스 호스팅 | 요소 정의에 <serviceHostingEnvironment> 특성을 allowDefinition="MachineToApplication" 추가하여 더 이상 서비스 수준에서 구성 요소를 지정할 수 없습니다.서비스 수준에서 요소를 지정하는 <serviceHostingEnvironment> 것은 기술적으로 올바르지 않으며 일관되지 않은 동작을 유발합니다. |
WPF(Windows Presentation Foundation)
응용 프로그램
네임스페이스: System.Windows, System.Windows.Controls
어셈블리: PresentationFramework(PresentationFramework.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
예외 처리 | 오류를 조기에 감지할 수 있도록, WPF는 원래 예외를 catch하지 않고 TargetInvocationException를 throw하며, InnerException 속성을 NullReferenceException, OutOfMemoryException, StackOverflowException, SecurityException와 같은 중대한 예외로 설정합니다. | 없음. |
연결된 리소스 | 더 쉽게 연결할 수 있도록 프로젝트의 폴더 구조 이외의 위치에 있는 리소스 파일(예: 이미지)은 애플리케이션을 빌드할 때 파일 이름 대신 리소스 파일의 전체 경로를 리소스 ID로 사용합니다. 애플리케이션은 런타임에 파일을 찾을 수 있습니다. | 없음. |
부분 신뢰 애플리케이션 | 보안상의 이유로, HTML이 포함된 WebBrowser 컨트롤이나 Frame 컨트롤을 포함하는 부분 신뢰로 실행되는 Windows 기반 애플리케이션은 컨트롤이 생성될 때 SecurityException를 던집니다. 브라우저 애플리케이션은 예외를 throw하고 다음 조건이 모두 충족되면 메시지를 표시합니다. * 애플리케이션이 Firefox에서 실행 중입니다. * 애플리케이션이 신뢰할 수 없는 사이트의 인터넷 영역에서 부분 신뢰로 실행되고 있습니다. * 애플리케이션에 HTML이 WebBrowser 포함된 컨트롤 또는 Frame 컨트롤이 포함되어 있습니다. 신뢰할 수 있는 사이트 또는 인트라넷 영역에서 실행되는 애플리케이션은 영향을 받지 않습니다. |
브라우저 애플리케이션에서 다음 중 하나를 수행하여 이 변경을 완화할 수 있습니다. * 브라우저 애플리케이션을 완전 신뢰 상태로 실행합니다. * 고객이 애플리케이션의 사이트를 신뢰할 수 있는 사이트 영역에 추가하도록 합니다. |
리소스 사전 | 테마 수준 리소스 사전을 개선하고 변경하지 못하도록 하기 위해 리소스 사전에 정의되고 테마 수준 사전으로 병합된 고정 가능한 리소스는 이제 항상 고정된 것으로 표시되고 변경할 수 없습니다. 이는 동결 가능한 리소스에 대해 예상되는 동작입니다. | 테마 수준 병합된 사전에 정의된 리소스를 수정하는 애플리케이션은 리소스를 복제하고 복제된 복사본을 수정해야 합니다. 리소스를 x:Shared="false" 으로 표시하여 리소스를 쿼리할 때마다 ResourceDictionary에서 새 복사본을 만들 수 있습니다. |
Windows 7 | Windows 7에서 WPF 애플리케이션이 더 잘 작동하도록 창의 동작을 수정하기 위해 다음과 같은 개선 사항이 적용되었습니다. * 이제 도킹 및 제스처 상태가 사용자 상호 작용에 따라 예상대로 작동합니다. * 작업 표시줄 명령 계단식 창, 누적된 창 표시 및 창 나란히 표시 가 올바른 동작을 가지며 적절한 속성을 업데이트합니다. Top , Left , Width , 및 Height 속성은 최대화 또는 최소화된 창의 모니터에 따라 다른 값이 아닌 창의 올바른 복원 위치를 포함합니다. |
없음. |
Windows 스타일 및 투명도 |
InvalidOperationException는 WindowStyle가 WindowStyle이고 AllowsTransparency가 true 일 때 WindowState을 WindowState 이외의 값으로 설정하려고 하면 throw됩니다. |
WindowStyle가 AllowsTransparency일 때, true 를 변경해야 한다면 Win32 SetWindowLongPtr 함수를 호출할 수 있습니다. |
XPS 뷰어 | WPF에는 XPSEP(Microsoft XML Paper Specification Essentials Pack)가 포함되어 있지 않습니다. XPSEP는 Windows 7 및 Windows Vista에 포함되어 있습니다. .NET Framework 3.5 SP1을 설치하지 않고 Windows XP를 실행하는 컴퓨터에서는 PrintDialog에 있는 것이 아닌 WPF API를 사용하여 인쇄하는 작업이 WINSPOOL에 의존합니다. 일부 프린터 기능은 보고되지 않으며 인쇄 중에는 일부 프린터 설정이 적용되지 않습니다. |
필요한 경우 Microsoft XML Paper Specification Essentials Pack을 설치합니다. |
제어
네임스페이스: System.Windows, System.Windows.Controls, System.Windows.DataSystem.Windows.Input
어셈블리: PresentationFramework(PresentationFramework.dll), PresentationCore(PresentationCore.dll), WindowsBase(WindowsBase.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
대화 상자 | 안정성을 높이기 위해 ShowDialog 메서드는 FileDialog 컨트롤을 만든 동일한 스레드에서 호출됩니다. | 컨트롤을 FileDialog 만들고 동일한 스레드에서 메서드를 ShowDialog 호출해야 합니다. |
부동 창 | 부동 창을 잘못 다시 활성화(모달 대화 상자처럼 표시)하는 포커스 복원 논리를 해결하려면 이제 후보가 창의 자식이 아닌 경우 포커스 복원이 방지됩니다. | 없음. |
컬렉션의 항목 | 항목이 기본 컬렉션으로 이동되거나 추가되면, CollectionView가 정렬되지 않은 경우 동일한 상대 위치에 CollectionView에 나타납니다. 이렇게 하면 컬렉션에서 항목의 위치와 연결된 CollectionView항목의 위치 간에 일관성이 제공됩니다. | ContainerFromItem 또는 IndexOf 메서드를 사용하여 항목 CollectionView 의 고정된 위치에 의존하는 대신 항목의 위치를 찾습니다. |
레이아웃 | 불필요한 재레이아웃을 방지하기 위해 이제 ShowsNavigationUI를 변경해도 레이아웃이 무효화되지 않거나 추가적인 레이아웃 처리를 유발하지 않습니다. | 변경 ShowsNavigationUI 으로 인해 다른 레이아웃 패스가 발생할 것으로 예상되는 경우 속성을 설정한 후 호출 InvalidateVisual 합니다. |
메뉴 | 메뉴 팝업에서 ClearType 텍스트를 사용하도록 설정하기 위해 ControlTemplate 클래스와 MenuItem 컨트롤 및 기타 컨트롤에 수정이 이루어졌습니다. | 애플리케이션은 컨트롤 템플릿의 시각적 구조에 의존해서는 안 됩니다. 공개 계약에 포함된 것은 ControlTemplate의 명명된 부분뿐이다. 애플리케이션에서 특정 개체를 찾아야 하는 경우 트리에서 ControlTemplate개체의 고정된 위치에 의존하는 대신 시각적 트리에서 특정 형식을 검색합니다. |
탐색 |
Frame가 위치 IsNavigationInitiator로 직접 이동하면, 속성은 초기 탐색 이후에 true 로 설정됩니다. 이 변경으로 인해 시작 시나리오 중에 추가 이벤트가 발생하지 않습니다. |
없음. |
팝업 | 이제 대리자를 CustomPopupPlacementCallback 한 번만 호출하는 대신 레이아웃 패스 중에 여러 번 호출할 수 있습니다. |
CustomPopupPlacementCallback 대리자가 이전 위치에 기준하여 Popup의 위치를 계산하는 경우, popupSize , targetSize , 또는 offset 매개 변수의 값이 변경되는 경우에만 위치를 다시 계산합니다. |
속성 값 | 이제 이 SetCurrentValue 메서드를 사용하면 속성에 영향을 주는 바인딩, 스타일 또는 트리거를 계속 적용하지만 속성을 유효 값으로 설정할 수 있습니다. | 컨트롤 작성자는 사용자 조작을 포함한 다른 작업의 부작용으로 속성 값이 변경될 때마다 SetCurrentValue를 사용해야 합니다. |
텍스트 상자 | 보안상의 이유로, 부분 신뢰 환경에서 호출될 때 Copy 및 Cut 메서드는 아무런 경고 없이 실패합니다. 또한, 부분 신뢰 환경에서 Copy로부터 상속된 컨트롤의 Cut 또는 TextBoxBase 속성의 프로그래밍 방식 실행은 차단됩니다. 그러나 사용자가 시작한 복사 및 잘라내기 명령은 Command 속성이 이러한 명령 중 하나에 바인딩된 단추를 클릭하는 경우에도 작동합니다. 기본 복사 및 잘라내기 기능은 키보드 단축키와 상황에 맞는 메뉴를 사용하여 부분 신뢰 환경에서도 이전과 같은 방식으로 작동합니다. |
사용자가 시작한 작업, 예를 들어 버튼 클릭에 Copy 또는 Cut 명령을 바인딩합니다. |
그래픽
네임스페이스: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.InputSystem.Windows.Media.Effects
어셈블리: PresentationFramework(PresentationFramework.dll), PresentationCore(PresentationCore.dll), WindowsBase(WindowsBase.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
비트맵 효과 | 성능을 개선하기 위해, BitmapEffect 클래스와 BitmapEffect 클래스에서 상속된 클래스는 여전히 존재하지만 비활성화됩니다. 다음 조건이 충족되면 하드웨어 가속 렌더링 파이프라인을 사용하여 효과가 렌더링됩니다. 애플리케이션은 반지름 속성이 100 DIU 미만으로 설정된 DropShadowBitmapEffect 또는 BlurBitmapEffect를 사용합니다. * 응용 프로그램을 실행하는 컴퓨터의 비디오 카드는 픽셀 셰이더 2.0을 지원합니다. 이러한 조건이 충족되지 않으면 BitmapEffect 개체는 아무런 영향을 미치지 않습니다. 또한 Visual Studio는 개체 또는 하위 클래스를 발견할 때 컴파일러 경고를 생성합니다 BitmapEffect . PushEffect 메서드가 사용되지 않는 것으로 표시됩니다. |
레거시 BitmapEffect 및 파생 클래스 사용을 중단하고 대신 다음에서 EffectBlurEffectDropShadowEffectShaderEffect파생된 새 클래스를 사용합니다. ShaderEffect 클래스를 상속하여 자신만의 효과를 만들 수도 있습니다. |
비트맵 프레임 | 복제된 BitmapFrame 개체는 이제 DownloadProgress, DownloadCompleted, 및 DownloadFailed 이벤트를 받습니다. 이렇게 하면 웹에서 다운로드되고 Image를 통해 컨트롤 Style에 적용된 이미지가 제대로 작동할 수 있습니다. 다음 명령문이 모두 true인 경우에만 동작이 변경됩니다. * DownloadProgress, DownloadCompleted, 또는 DownloadFailed 이벤트를 구독합니다. * 원본은 BitmapFrame 웹에서 가져옵니다. BitmapFrame* 다운로드가 진행 중인 동안 복제됩니다. |
이벤트 처리기에서 보낸 이를 확인하고 발신자가 원래 BitmapFrame인 경우에만 작업을 수행합니다. |
이미지 디코딩 | 이미지가 디코딩되지 않을 때 처리되지 않는 것을 방지하기 위해, 이미지가 디코딩되지 않을 때 IOException 클래스는 BitmapSource 이벤트를 발생시킵니다. | 에 대한 IOException예외 처리를 제거하고 이벤트를 사용하여 DecodeFailed 디코딩 오류를 확인합니다. |
입력
네임스페이스: System.Windows, System.Windows.Controls, System.Windows.DataSystem.Windows.Input
어셈블리: PresentationFramework(PresentationFramework.dll), PresentationCore(PresentationCore.dll), WindowsBase(WindowsBase.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
바인딩 명령 인스턴스 | 뷰-모델 기반 명령 인스턴스를 뷰 기반 입력 제스처에 바인딩하는 메커니즘을 제공하기 위해, 이제 InputBinding 클래스는 Freezable를 대신하여 DependencyObject에서 상속됩니다. 이제 다음 속성은 종속성 속성입니다. * Command * CommandParameter * CommandTarget 이렇게 변경하면 다음과 같은 결과가 발생합니다. * InputBinding 개체는 이제 등록될 때 변경 가능 상태로 유지되지 않고 동결됩니다. * 클래스의 InputBinding 제한으로 인해 여러 스레드에서 인스턴스 수준 DependencyObject 개체에 액세스할 수 없습니다. * 클래스의 제한 Freezable 으로 인해 등록 후 클래스 수준 입력 바인딩을 변경할 수 없습니다. * 뷰 모델에서 만든 명령 인스턴스에는 입력 바인딩을 지정할 수 없습니다. |
바인딩을 변경할 수 있는 경우 별도의 스레드에서 InputBinding 클래스의 별도 인스턴스를 생성하십시오. 그렇지 않으면 해당 인스턴스를 고정하여 불변 상태로 만드십시오. 클래스 수준 정적 InputBinding 이 등록된 후에는 변경하지 마세요. |
브라우저 애플리케이션 | WPF 브라우저 애플리케이션(. XBAP) 이제 개체가 올바른 순서로 라우트된 키 이벤트를 받을 수 있도록 독립 실행형 WPF 애플리케이션과 마찬가지로 키 이벤트를 처리합니다. | 없음. |
비활성 키 조합 | WPF는 데드 키를 난독 처리하여 표시되는 문자를 생성하지 않지만 대신 키를 다음 문자 키와 결합하여 하나의 문자를 생성해야 임을 나타냅니다. 키 입력 이벤트는 KeyDownEvent 이벤트와 같이 속성을 Key 값으로 Key로 설정하여 키가 죽은 키일 때 이를 보고합니다. 애플리케이션은 일반적으로 결합된 문자를 만드는 키보드 입력에 응답할 의도가 없기 때문에 이 동작은 일반적으로 예상됩니다. | 결합된 문자의 일부인 키를 읽을 것으로 예상되는 애플리케이션은 DeadCharProcessedKey 속성을 사용하여 현재 난독화된 키를 가져올 수 있습니다. |
포커스 관리자 |
FocusManager.GetFocusedElement(DependencyObject)
IsFocusScope 연결된 속성이 설정된 true 요소를 메서드에 전달하면 반환된 요소가 메서드에 전달된 요소와 동일한 PresentationSource 개체에 속하는 경우에만 해당 포커스 범위 내의 마지막 키보드 중심 요소인 요소를 반환합니다. |
없음. |
UI 자동화
네임스페이스: System.Windows,System.Windows.Automation.Peers, System.Windows.Automation.Provider, System.Windows.Controls, System.Windows.DataSystem.Windows.Input
어셈블리: PresentationFramework(PresentationFramework.dll), PresentationCore(PresentationCore.dll), UIAutomationProvider(UIAutomationProvider.dll), WindowsBase(WindowsBase.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
뷰의 클래스 계층 구조 | TreeViewAutomationPeer 및 TreeViewItemAutomationPeer 클래스는 ItemsControlAutomationPeer 대신 FrameworkElementAutomationPeer를 상속받습니다. | TreeViewItemAutomationPeer 클래스로부터 상속하고 GetChildrenCore 메서드를 재정의할 경우, 새로운 TreeViewDataItemAutomationPeer 클래스로부터 상속된 객체를 반환하도록 고려하세요. |
화면 밖의 컨테이너 | 잘못된 반환 값을 수정하기 위해 IsOffscreenCore 메서드는 이제 항목 컨테이너가 보기를 벗어났을 때 false 값을 올바르게 반환합니다. 또한 메서드 값은 다른 창의 폐색 또는 요소가 특정 모니터에 표시되는지 여부에 의해 영향을 받지 않습니다. |
없음. |
메뉴 및 하위 개체 | 메뉴에 개체 MenuItem 이외의 자식이 포함될 때 UI 자동화를 활성화하기 위해 이제 메서드는 GetChildrenCore 대신 자식 AutomationPeer 개체의 UIElement 개체를 반환합니다. | 없음. |
새 인터페이스 및 어셈블리 | UI 자동화에 새 기능을 사용하도록 설정하기 위해 다음 인터페이스가 추가되었습니다. * IItemContainerProvider * ISynchronizedInputProvider * IVirtualizedItemProvider |
WPF 자동화 피어를 빌드하는 모든 프로젝트는 UIAutomationProvider.dll대한 명시적 참조를 추가해야 합니다. |
엄지손가락 | 메서드는 GetClassNameCore null 대신 값을 반환합니다. 따라서 GridSplitter 클래스에서 상속된 컨트롤인 Thumb는 이름을 UI 자동화에 보고합니다. | 없음. |
가상화된 요소 | 성능을 향상시키기 위해 메서드는 GetChildrenCore 가상화 여부에 관계없이 모든 자식 개체 대신 실제로 시각적 트리에 있는 자식 개체만 반환합니다. | ItemContainerPattern의 모든 항목을 반복하려면 ItemsControlAutomationPeer를 사용하십시오. |
XAML
네임스페이스: System.Windows, System.Windows.Controls, System.Windows.Data, System.Windows.InputSystem.Windows.Markup
어셈블리: PresentationFramework(PresentationFramework.dll), PresentationCore(PresentationCore.dll), WindowsBase(WindowsBase.dll)
특징 | 3.5 SP1의 차이점 | 권장되는 변경 내용 |
---|---|---|
마크업 확장 | 이제 WPF는 태그 확장을 사용하여 속성을 설정하거나 컬렉션에 ProvideValue 항목을 만들 때 특정 경우에 개체를 반환하는 MarkupExtension 대신 메서드의 값을 항상 올바르게 사용합니다. 경우에 따라 마크업 확장이 자기 자신을 반환할 수 있습니다. | 애플리케이션이 이전 버전에서 `MarkupExtension` 개체를 반환한 리소스에 액세스하는 경우 `ProvideValue` 개체 대신 `MarkupExtension`에서 반환된 개체를 참조하세요. |
속성 분석 | 이제 XAML의 특성에는 마침표가 하나만 있을 수 있습니다. 예를 들어 다음과 같은 것이 유효합니다.<Button Background="Red"/> (마침표 없음)<Button Button.Background = "Red"/> (1개 마침표)다음은 더 이상 유효하지 않습니다. <Button Control.Button.Background = "Red"/> (둘 이상의 기간) |
마침표가 두 개 이상 있는 XAML 특성을 수정합니다. |
XML
이 표의 행에서는 이전에 제한 사항 또는 기타 문제가 있었던 기능의 향상된 기능을 설명합니다.
스키마 및 변환
네임스페이스: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
어셈블리: System.Xml(System.Xml.dll), System.Xml.Linq(System.Xml.Linq.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
카멜레온 스키마 | 데이터 손상을 방지하기 위해 카멜레온 스키마는 이제 여러 스키마에 포함될 때 올바르게 복제됩니다. 카멜레온 스키마는 대상 네임스페이스가 없는 스키마이며 다른 XSD에 포함되면 가져오기 스키마의 대상 네임스페이스를 사용합니다. 공통 형식을 스키마에 포함하는 데 자주 사용됩니다. |
ID 함수 | 이제 XSLT ID 함수 는 개체가 XLST에 전달될 때 XmlReader null 대신 올바른 값을 반환합니다. 사용자가 XmlReader 메서드를 사용하여 LINQ to XML 클래스에서 CreateReader 개체를 만들고 이 XmlReader 개체가 XSLT에 전달된 경우, XSLT에 있는 모든 id 함수 인스턴스는 이전에 null을 반환했습니다.
id 함수에 허용되지 않는 반환 값입니다. |
네임스페이스 특성 | 데이터 손상을 방지하기 위해 XPathNavigator 개체는 x:xmlns 특성의 로컬 이름을 이제 올바르게 반환합니다. |
네임스페이스 선언 | 하위 트리의 개체는 XmlReader 더 이상 하나의 XML 요소 내에 중복 네임스페이스 선언을 생성하지 않습니다. |
스키마 유효성 검사 | 잘못된 스키마 유효성 검사를 XmlSchemaSet 방지하기 위해 클래스를 사용하면 XSD 스키마를 정확하고 일관되게 컴파일할 수 있습니다. 이러한 스키마는 다른 스키마를 포함할 수 있습니다. 예를 들어, A.xsd 는 B.xsd 를 포함할 수 있으며, B.xsd 는 를 포함할 수 있습니다. 이러한 중 하나를 컴파일하면 이 종속성 그래프가 트래버스됩니다. |
스크립트 함수 | 함수가 실제로 사용 가능한 경우, 더 이상 잘못된 값인 을 반환하지 않습니다. |
URI | 이제 이 메서드는 Load LINQ 쿼리에서 올바른 BaseURI를 반환합니다. |
유효성 검사
네임스페이스: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
어셈블리: System.Xml(System.Xml.dll), System.Xml.Linq(System.Xml.Linq.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
네임스페이스 해결자 | 메서드는 더 이상 전달된 ReadContentAs 확인자를 무시하지 않습니다. 이전 버전에서는 지정된 네임스페이스 확인자를 무시하고 XmlReader 대신 사용했습니다. |
공백 | 판독기를 만들 때 데이터 손실을 방지하기 위해 메서드는 Create 더 이상 상당한 공백을 삭제하지 않습니다. XML 유효성 검사는 텍스트가 XML 태그와 섞일 수 있는 혼합 콘텐츠 모드를 인식합니다. 혼합 모드에서는 모든 공백이 중요하게 여겨지며 보고되어야 합니다. |
쓰기
네임스페이스: System.Xml.Linq; System.Xml.Schema, System.Xml.XPath
어셈블리: System.Xml(System.Xml.dll), System.Xml.Linq(System.Xml.Linq.dll)
특징 | 3.5 SP1의 차이점 |
---|---|
엔터티 참조 | 데이터 손상을 방지하기 위해 엔터티 참조는 더 이상 XML 특성에서 두 번 엔터티화되지 않습니다. 사용자가 xmlns 메서드를 사용하여 xml:lang 속성 또는 xml:space 또는 WriteEntityRef 속성에 엔터티를 기록하려고 한 경우, 출력상에서 엔터티가 두 번 엔터티화되어 데이터가 손상되었습니다. |
새 줄 처리 | 데이터 손상을 방지하기 위해 XmlWriter 개체는 NewLineHandling 옵션을 준수합니다. |
참고하십시오
.NET