이 페이지가 유용했습니까?
이 콘텐츠에 대한 여러분의 의견은 중요합니다. 의견을 알려주십시오.
추가 의견
1500자 남음
내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 앱 플랫폼 호환성

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

일반적으로 Windows Phone 앱 플랫폼을 사용하면 Windows Phone OS 7.1 을 대상으로 하는 앱을 수정하거나 다시 컴파일하지 않고 Windows Phone 8 에서 실행할 수 있습니다. 그러나 Windows Phone 8 에뮬레이터 또는 단말기에서 앱을 테스트하여 예상대로 작동하는지 확인해야 합니다. Windows Phone 8 의 향상된 성능과 더 빠른 다중 코어 하드웨어가 지원 및 외부의 시각적 차이는 Windows Phone 8 에서 Windows Phone OS 7.1 앱의 동작과 모양에 영향을 줄 수 있습니다.

또한 Windows Phone OS 7.1 앱이 Windows Phone 8 에서 실행될 때 다르게 동작할 수 있는 다른 시나리오가 있습니다. 한 가지 시나리오는 소스 비호환성 및 적용된 특수 모드 변경 때문입니다. 다른 시나리오의 원인은 이외의 경우에 주요 변경으로 알려진 이진 비호환성입니다. 대체로 특수 모드 때문에 소스 비호환성 차이는 특정 버전의 Windows Phone 을 대상으로 하는 개발자에게 투명합니다. 그러나 런타임 동작 변경이나, 주요 변경으로 간주되는 사항들의 변경 사항, 또는 Windows Phone 8 용 Windows Phone OS 7.1 앱을 다시 컴파일한 다음 더 이상 특수 모드가 적용되지 않을 때 발생하는 변경 때문에 앱 호환성 문제가 확인될 수 있습니다. 이 항목에서는 특수 모드와 주요 변경에 대해 자세히 설명하고, 개발자에게 영향을 주는 Windows Phone 8 에서 알려진 주요 변경 및 특수 모드를 나열합니다.

참고참고:

이 문서에서 Windows Phone OS 7.1 에 대한 내용은 Windows Phone OS 7.0 에도 적용됩니다.

이 항목에는 다음 단원이 포함되어 있습니다.

 

Windows Phone 8 에서는 기존 앱에 대해 비호환성 문제가 생길 수 있는 기능 향상 또는 동작 변경이 도입되었습니다. 일부 기능과 API의 경우 Windows Phone 앱 플랫폼은 주요 변경 사항을 도입하는 대신 앱이 원래 빌드 및 테스트된 Windows Phone 버전에 따라 레거시 동작을 유지하고, 해당하는 경우 적용합니다. 대상 버전이 Windows Phone OS 7.1 인 경우 특수 모드는 Windows Phone OS 7.1 과 동일한 동작을 에뮬레이트하거나 동일한 코드를 사용합니다. 즉, 앱이 원래 대상으로 했던 런타임에 대해 테스트되었을 때처럼 Windows Phone 8 에서 실행됩니다.

참고참고:

Windows Phone OS 7.1 에 대해 개발된 타사 라이브러리는 Windows Phone OS 7.1 앱에서 사용되는 경우 특수 모드를 이용합니다. 그러나 라이브러리가 Windows Phone 8 앱에서 사용되는 경우 특수 모드 외부에서 실행됩니다.

Windows Phone OS 7.1 을 대상으로 하는 앱의 소스 코드를 대상 Windows Phone 8 으로 다시 컴파일할 경우 특수 모드가 더 이상 적용되지 않습니다. 이제 앱이 Windows Phone 8 을 대상으로 하므로 모든 경우에 새 코드를 실행합니다. 특수 모드는 옵트인 또는 구성 가능한 기능이 아니며, 앱의 대상 플랫폼에 따라 자동으로 적용됩니다.

이진 비호환성이나 주요 변경 사항의 경우 Windows Phone OS 7.1 을 대상으로 하는 앱이 Windows Phone 8 에서 실행되면 런타임 동작의 차이 때문에 동일하게 동작하지 않습니다. 이러한 동작 차이는 특수 모드로 적용되지 않았으므로 두 플랫폼에서 모두 동일하게 실행되도록 앱을 수정해야 합니다. 예를 들어 이러한 변경 사항은 앱 모양의 사소한 차이나 코드 실행 순서의 차이일 수 있습니다.

다음 표에서는 특수 모드의 영향을 받지 않는 Windows Phone OS 7.1 및 Windows Phone 8 플랫폼 간의 주요 변경 사항을 보여 줍니다. 일부 변경 사항의 경우 Windows Phone OS 7.1 및 Windows Phone 8 에서 동일하게 실행되도록 앱을 수정해야 할 수도 있습니다. 변경의 영향과 소스 코드의 수정 방법에 대한 자세한 내용은 표의 영향 열을 참조하세요.

Windows Phone 8 의 많은 변경 내용 때문에 프로젝트를 업그레이드하는 동안 몇 가지 문제가 발생할 수 있습니다. 수행해야 하는 단계 및 프로젝트를 업그레이드할 때 발생할 수 있는 문제에 대한 자세한 내용은 앱 프로젝트를 Windows Phone 8로 업그레이드하는 방법을 참조하세요.

Windows Phone 관련 기능

다음 표에서는 핵심 Windows Phone 기능의 주요 변경 사항을 보여 줍니다.

기능

변경

영향/해결 방법

뒤로 버튼 탐색

사용자가 앱에 표시된 광고를 클릭하고 뒤로 버튼을 연속으로 두 번 클릭하면 Windows Phone 8 에서 앱이 종료됩니다. Windows Phone OS 7.1 에서 사용자는 앱 후방 스택을 통해 이동합니다.

이는 UI 동작 변경 사항이며, 다른 방법은 없습니다. 그러나 사용자가 앱을 예기치 않게 종료하는 경우 앱에 삭제 표식이 제대로 지정되었는지 확인해야 합니다.

백그라운드 파일 전송

동시 파일 전송 수의 제한이 5개에서 25개로 증가했습니다.

25개 제한에 도달할 때까지 예외가 발생하지 않습니다. 상한에 도달할 때까지 요청을 제거하지 않아도 됩니다.

백그라운드 파일 전송

Windows Phone 8 에서 백그라운드 전송 서비스는 앱이 포그라운드에 있을 때 다음 데이터 네트워크에서 전송합니다. Windows Phone OS 7.0 에서는 앱이 포그라운드에서 실행되는지 여부에 관계없이 이러한 데이터 네트워크에서 전송이 수행되지 않습니다.

  • 2G

  • EDGE

  • 표준

  • GPRS

Windows Phone 8 에서 앱이 포그라운드에 있지 않으면 이 네트워크에서 전송이 진행되지 않습니다. 이 제한은 HttpWebRequest 개체에도 마찬가지로 적용되므로, 여러분 자신의 전송을 수행하는 것이 배경 전송을 사용하는 것에 비해 유리하지는 않습니다. 3G 이상의 네트워크에서는 다른 모든 조건이 충족되었다고 가정하여 앱이 포그라운드에서 실행되고 있는지 여부에 관계없이 백그라운드 전송이 Windows Phone 8 과 Windows Phone OS 7.1 모두에서 계속 진행됩니다.

Windows Phone OS 7.1 에서 발생하지 않는 백그라운드 전송이 Windows Phone 8 에서는 발생합니다. 따라서 두 가지 플랫폼을 모두 대상으로 지정하려면 코드에서 이를 고려해야 합니다.

선택자

이전에 선택자에 대한 탐색이 이미 수행되는 동안 선택자의 Show 메서드를 호출하면 예외가 발생합니다. 이제 Show에 대한 두 번째 호출이 자동으로 실패합니다.

try 블록에서 선택자의 Show 메서드에 대한 호출을 수행할 필요가 없습니다.

CompassReading

CompassReading 구조체의 TrueHeadingMagneticHeading 속성은 double 형식의 값을 반환합니다. Windows Phone OS 7.1 에서, 이 double 값은 122.0도처럼 다소 정밀하지 않게 반환됩니다. 하지만 Windows Phone 8 에서, 이 속성의 double 값은 122.12345도처럼 정밀하게 반환됩니다.

예를 들어, 값을 string으로 변환한 다음 다시 double 값으로 변환하는 경우처럼 이러한 값을 조작하거나 변환할 때에는 이러한 정밀도가 낮아지고 있지 않은지 확인하도록 합니다.

DRM(디지털 권한 관리)

Windows Phone 8 에서는 DRM 동영상을 질감으로 올바르게 사용할 수 없습니다. 동영상은 기본적으로 검정 디스플레이로 설정됩니다. Windows Phone OS 7.1 및 이전 버전에서는 DRM으로 보호된 동영상을 컴퍼지션 질감으로 액세스할 수 있습니다. 동영상은 장면의 다른 질감 콘텐츠처럼 작성됩니다. 표준 동영상 오버레이 컨트롤은 영향을 받지 않습니다. 작성자는 이러한 프레임을 올바르게 혼합합니다.

프레임을 표시하려면 오버레이 표면으로 그리기 위해 작성자에 전달해야 합니다. 다음 각 경우에서 동영상은 오버레이를 통해 렌더링할 수 없습니다.

  • 비카디널 회전(0, 90, 180, 270 이외의 각도)

  • 부분 투명도

  • 3D 프로젝션(동영상을 포함하는 움직이는 개체)

FM 라디오

Windows Phone 8 에서는 FM 라디오 기능을 지원하지 않습니다. Windows Phone 8 앱에서 FM 라디오 API를 사용하면 RadioDisabledException이 발생합니다.

앱이 FM 라디오 API를 호출할 경우 앱을 실행하는 휴대폰의 OS 버전을 찾은 다음 장치가 Windows Phone 8 휴대폰이면 앱의 이 부분을 사용하지 않도록 설정합니다. 그렇지 않으면 예외가 발생하며 앱이 예외를 처리하지 못하면 앱이 예기치 않게 종료됩니다.

LayoutUpdated 이벤트

이벤트 배열은 Windows Phone OS 7.1 과 Windows Phone 8 에서 정확히 동일하지는 않습니다. 이 때문에, 초기 LayoutUpdated 이벤트의 크기는 처음 Windows Phone 8 에서 실행될 때 올바르지 않습니다. 두 번째 실행될 때에는 크기가 올바르게 됩니다.

LayoutUpdated에서 크기를 사용하는 경우에는, 먼저 ActualWidthActualHeight가 0보다 크고 올바른지 확인하여 이러한 차이를 해결할 수 있습니다. 이 차이를 처리하는 예제 코드를 보려면 LayoutUpdated 이벤트를 참조하세요.

ListBox 컨트롤

Windows Phone 8 프로젝트에서 작업을 수행하는 경우 ListBox 컨트롤이 도구 상자에 표시되지 않습니다. LongListSelector 컨트롤은 Windows Phone 8 앱에서 항목 목록을 표시하기 위한 권장 컨트롤입니다.

XAML 편집기에서 ListBox 컨트롤을 수동으로 추가하거나 LongListSelector 컨트롤을 사용할 수 있습니다.

로컬 데이터베이스

설치 폴더에 액세스하는 경우가 아니면 Windows Phone 8 에서는 읽기 전용 연결 문자열을 사용하여 격리된 저장소의 로컬 데이터베이스에 더 이상 액세스할 수 없습니다.

읽기 전용 연결 문자열을 사용하여 격리된 저장소의 로컬 데이터베이스에 액세스하려고 하면 NotSupportedException이 발생합니다.

ManipulationCompleted 이벤트

Windows Phone 8 에서 LongListSelector, Panorama 또는 Pivot 컨트롤에 대해 ManipulationCompleted 이벤트를 처리하려는 경우, 이벤트 처리기 코드가 실행되지 않습니다. Windows Phone OS 7.1 에서는 이벤트 처리기 코드가 실행됩니다.

Windows Phone 8 에서 LongListSelector, PanoramaPivot은 프레임워크의 일부입니다. ManipulationCompleted 이벤트는 Windows Phone 8 에서 UI가 더 잘 작동하도록 처리된 것으로 표시됩니다.

Windows Phone 8 및 Windows Phone OS 7.1 에서 ManipulationCompleted 이벤트를 처리해야 할 경우 AddHandler 메서드를 사용하세요. 자세한 내용은 ManipulationCompleted 이벤트를 참조하세요.

MessageBox.Show(String)

MessageBox.Show(String, String, MessageBoxButton)

ActivatedLaunching 이벤트 처리기에서 Show(String) 메서드를 호출하면 InvalidOperationException이 발생하고 Error Displaying MessageBox 메시지가 표시됩니다.

OnNavigatedTo(NavigationEventArgs) 메서드에서 Show(String) 메서드를 호출합니다.

MessageBox.Show(String)

MessageBox.Show(String, String, MessageBoxButton)

Windows Phone 8 에서는 OnBackKeyPress(CancelEventArgs) 또는 BackKeyPress 이벤트에 대한 처리기에서 Show를 호출하면 앱이 종료됩니다.

다음 단계에서 설명하듯이, 다른 스레드에서 Show를 호출하여 이 문제를 해결할 수 있습니다.

  1. BackKeyPress를 재정의하거나 BackKeyPress 이벤트에 대한 처리기를 만듭니다.

  2. Canceltrue로 설정하여 뒤로 키 누르기 동작을 취소합니다.

  3. MessageBox를 보여주는 메서드를 디스패치합니다.

  4. 사용자가 앱을 종료하도록 선택하면 Terminate()를 호출하고, 그렇지 않으면 아무 작업도 수행하지 마세요.

MessageBox 컨트롤

MessageBox 컨트롤에 대한 간격, 여백 및 안쪽 여백이 Windows Phone 8 에 대해 업데이트되었습니다.

간격, 여백 및 안쪽 여백의 변경은 앱에서 컨트롤 레이아웃에 영향을 줄 수 있습니다. Windows Phone 8 에서 MessageBox 컨트롤을 사용하는 Windows Phone OS 7.1 앱을 테스트하여 모양이 변경되지 않았는지 확인합니다.

Microsoft.Phone.Media.Extended 어셈블리

Windows Phone OS 7.1 휴대폰 단말기의 ROM에 포함된 Microsoft.Phone.Media.Extended 어셈블리는 Windows Phone 8 휴대폰에서 사용할 수 없습니다.

리플렉션을 사용하여 이 어셈블리의 API에 액세스한 경우 API가 공개적으로 노출되지 않았으므로 Windows Phone 8 장치에서 앱이 실패할 수 있습니다. 이 어셈블리 호출을 제거하고 공개적으로 노출된 미디어 API를 사용합니다.

네트워킹

Windows Phone 8 에서는 Windows Phone 8 클라이언트가 Vary 헤더를 처리하고 응답을 캐시할 수 있으므로 웹 서비스 호출이 이전 버전보다 훨씬 빠르게 완료될 수 있습니다.

이 변경 사항의 영향은 최소화됩니다. 그러나 웹 서비스를 호출하는 경우 코드에서 1초 이상 걸리는 다운로드를 사용하면 안 됩니다. 응답 시간은 1초 미만일 수 있으므로 응답 시간을 확인할 때는 밀리초와 부동 소수점 숫자를 사용해야 합니다.

Panel 컨트롤

Windows Phone 8 에서는 Panel에서 파생되는 컨트롤(예: Canvas, GridLength, StackPanel)의 높이가 2560보다 크면, 배경이 다른 색으로 설정되어 있더라도 Background 브러시가 검정으로 설정됩니다.

이 문제를 해결할 수 있는 방법은 없습니다.

사진 선택기 작업

Windows Phone 8 에서 사진 선택 작업은 라는 앱의 격리된 저장소 맨 위 수준에 “PlatformData”라는 디렉터리를 만듭니다.

Windows Phone OS 7.1 에서 사용하도록 개발된 앱이 Windows Phone 8 을 실행하는 휴대폰에 배포되거나 Windows Phone 8 에서 사용할 새 앱을 만들고 해당 앱이 사진 선택 작업을 사용하는 경우, 앱이 격리된 저장소의 콘텐츠에 대해 반복되고 시스템에서 생성된 디렉터리를 건너뛰려면 “PlatformData” 및 “Shared”를 건너뜁니다.

시스템 트레이의 ProgressIndicator

Windows Phone OS 7.1 에서 시스템 트레이의 진행률 표시기를 업데이트하는 코드는 동기식입니다. Windows Phone 8 에서 진행률 표시기를 업데이트하는 코드는 이제 비동기식입니다.

일부 경우, 이러한 변화로 인해 진행률 표시기가 Windows Phone 8 의 시스템 트레이에 표시되지 않을 수 있습니다. 예를 들어, ProgressIndicator 클래스를 사용하여 진행률 표시기를 설정하고 즉시 UI 스레드(예: 리소스를 많이 사용하는 작업 수행)를 차단한다면, 진행률 표시기가 표시되지 않습니다. 이것은 시스템이 진행률 표시기를 업데이트하라는 요청을 처리할 수 없기 때문입니다.

이 문제를 해결할 수도 있는 방법이 있습니다. 시간 제한이 작고 기간이 무한대인 타이머를 사용하고, 타이머 콜백 내의 Dispatcher.BeginInvoke를 호출하여 리소스를 많이 사용하는 작업을 예약하는 경우, 처리할 메시지 대기열이 활성화되고 진행률 표시기는 리소스를 많이 사용하는 작업을 시작하기 전에 적용됩니다.

SSL(Secure Sockets Layer)

앱에서 웹 서비스나 웹 사이트에 대해 SSL을 요청하면 Windows Phone 8 용 앱의 경우 보안 인증서 해지 목록을 받기 위해 사이트의 인증서 발급사에 연결합니다. Windows Phone 8 앱의 이러한 추가적인 네트워크 요청은 SSL 요청에 필요한 시간을 증가시킵니다. 인증서 취소 목록을 제때 받지 못하는 경우, 느리거나 불안정한 네트워크 연결로 인해 SSL 요청의 시간 제한을 초과하여 중단될 수 있습니다.

앱이 시간 제한으로 인한 중단 가능성을 처리하고 요청을 다시 시도하거나 요청된 데이터 없이 계속되는지 확인하세요.

Slider 컨트롤

Windows Phone 8 에서 Slider 컨트롤 및 그 API는 많이 변경되었습니다.

HorizontalLargeIncrease, HorizontalLargeDecrease, HorizontalThumb, VerticalLargeIncrease, VerticalLargeDecreaseVerticalThumb은 컨트롤 템플릿에서 제거되었습니다.

새로운 해당 템플릿 부분은 HorizontalFill, HorizontalTrack, HorizontalCenterElement, VerticalFill, VerticalTrackVerticalCenterElement입니다. 새로운 템플릿 부분은 FrameworkElement 유형 모두입니다.

Windows Phone 8 로 업그레이드할 앱의 Slider 컨트롤용 템플릿을 다시 만든 경우 컨트롤 템플릿을 수정하여 제거했거나 추가한 템플릿 부분을 포함해야 할 수 있습니다.

TextBox 컨트롤

Windows Phone 8 에서 AcceptsReturn 속성의 값이 false인 경우(즉, TextBox가 여러 줄의 TextBox가 아닌 경우) TextBox에서 Enter 키로 호출된 이벤트는 다르게 동작합니다. Windows Phone OS 7.1 을 대상으로 하는 앱에서 TextInput 이벤트는 TextBox에서 처리하지 않는 Enter 키 누르기로 호출됩니다. Windows Phone 8 을 대상으로 하는 앱에서 TextInput 이벤트는 이러한 Enter 키 누르기로 호출되지 않습니다.

Windows Phone 8 을 대상으로 하는 앱에서는 TextBox에서 처리하지 않는 Enter 키 누르기를 캡처하도록 KeyDown 이벤트를 처리하세요.

타일

Windows Phone 8 에서 Closing 처리기 내에 Create(Uri, ShellTileData) 메서드를 사용하여 타일을 만들면 InvalidOperationException이 발생합니다.

앱 프로젝트의 다른 위치에서 Create(Uri, ShellTileData) 메서드를 사용합니다.

UIElement 텍스트 입력 이벤트

TextInput, TextInputStartTextInputUpdate 이벤트는 Windows Phone 8 에서 발생하지 않으며 Windows Phone OS 7.1 에서 발생했습니다.

텍스트 입력 이벤트에 의존하여 텍스트 컨트롤의 변경 내용을 감지할 수 없습니다. 대신, KeyDown 이벤트를 사용하여 텍스트 변경을 감지하도록 합니다.

VibrateController 컨트롤러

Windows Phone OS 7.1 에서 이전에 Start(TimeSpan) 메서드를 호출하지 않고 VibrateControllerStop() 메서드를 호출한 경우 휴대폰이나 토스트 알림 등의 기타 앱에서 시작된 진동을 포함하여 모든 진동이 취소됩니다. Windows Phone 8 에서 이전에 Start(TimeSpan) 메서드를 호출하지 않고 VibrateControllerStop() 메서드를 호출하면 아무 것도 발생하지 않습니다. 예외는 발생하지 않습니다.

이 문제에 필요한 해결 방법이 없습니다.

동영상 재생

Windows Phone 8 에서는 휴대폰을 잠갔다가 잠금 해제한 후 동영상 재생을 다시 계속하는 기능이 변경되었습니다. Windows Phone OS 7.1 에서 동영상은 일시 중지된 상태로 열리고 이미지가 표시됩니다. Windows Phone 8 에서 동영상은 일시 중지된 상태로 열리지만 일시 중지된 동영상의 프레임 대신에 빈 검정 상자가 표시됩니다. 두 가지 경우 모두 사용자가 재생을 클릭하여 동영상을 계속해야 합니다.

이 문제는 UI 환경의 변경 내용이며 해결 방법이 없습니다.

WebBrowser 컨트롤

웹 브라우저 컨트롤에 연결된 UserAgent 문자열은 Windows Phone OS 7.1 과 Windows Phone 8 사이에 약간 변경되었습니다.

UserAgent 문자열과 정확히 일치하는 것을 찾지 말고 대신 일반적으로 일치하는 것을 찾도록 합니다.

WebBrowser 컨트롤

WebBrowser 컨트롤에는 콘텐츠가 앱에 어떻게 표시되는지에 영향을 주는 여러 변경 내용이 있습니다. 앱이 WebBrowser 컨트롤을 사용하는 경우 Windows Phone OS 7.1 에 표시되는 것처럼 Windows Phone 8 에 동일하게 표시되지 않을 수 있습니다.

Windows Phone 8 에뮬레이터 및 단말기에서 앱을 배포 및 테스트해야 합니다. WebBrowser에서 텍스트, 글머리 기호 항목 및 드롭다운 화살표 모양의 변경 내용을 찾은 다음, 이러한 변경 내용이 앱의 유용성에 영향을 주는지 확인해야 합니다.

WebBrowser 컨트롤

WebBrowser 컨트롤은 스크롤 시 다르게 동작할 수 있습니다. 앱이 WebBrowser 컨트롤을 사용하는 경우 스크롤 동작이 Windows Phone OS 7.1 에 표시되는 것과 동일하게 Windows Phone 8 에서 동작하지 않을 수 있습니다.

WebBrowser에서 스크롤 동작을 테스트하고 그 차이가 앱의 유용성에 영향을 주는지 판단해야 합니다.

WebBrowser 컨트롤

WebBrowser 컨트롤에 표시되는 콘텐츠에서 페이지 배율 뷰포트 설정(예: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"/>)을 사용한다면 레이아웃이 다를 수 있습니다. Windows Phone OS 7.1 에서 WebBrowser 컨트롤은 레이아웃 렌더링 시 페이지 배율 뷰포트 설정을 고려하지 않습니다. 반면 Windows Phone 8 에서는 WebBrowser 컨트롤이 레이아웃 렌더링 시 페이지 배율 뷰포트 설정을 사용합니다.

페이지 배율 뷰포트 설정을 지정하는 경우에는 레이아웃 차이가 있는지 앱을 테스트해야 합니다.

WebBrowser 컨트롤

Window.External 개체의 ScriptNotify 메서드를 사용하여 OnContextMenu를 호출하는 작업은 Windows Phone 8 에서 지원되지 않습니다.

OnMSGestureHold 이벤트를 사용하여 Windows Phone 8 에서 상황에 맞는 메뉴를 표시할 수 있습니다.

WebBrowser 컨트롤

Windows Phone 8 에서는 깜박임 커서가 텍스트 필드에 항상 나타나지는 않습니다.

해결 방법은 없습니다. 텍스트 필드는 예상대로 작동합니다.

XNA

Game.IsActive 속성이 설정될 때의 변경 내용으로 인해 게임이 예상대로 계속되지 않을 수 있습니다.

게임을 실행하고 게임이 실행되는 동안 장치를 잠갔다가 장치를 잠금 해제하여 Windows Phone 8 에서 Windows Phone 앱을 테스트하고 장치가 제대로 계속되는지 확인합니다. 장치가 제대로 계속되지 않으면 게임을 일시 중지하기 전에 Game.IsActive 속성을 확인할 위치를 조정합니다.

XNA

Windows Phone 8 에서 다음 렌더링 형식은 지원되지 않습니다.

  • SurfaceFormat.Bgra4444

  • SurfaceFormat.Bgra5551

이러한 형식을 사용하면 기본값 SurfaceFormat.Color로 설정됩니다.

XNA TouchPanel

Windows Phone OS 7.1 앱에서 TouchPanel API는 실제 픽셀을 나타내는 크기 정보를 반환합니다. Windows Phone 8 앱에서 TouchPanel API는 논리 픽셀을 나타내는 크기 정보를 반환합니다. 이것은 이제 Windows Phone 8 이 여러 해상도를 지원하기 때문입니다.

앱을 다양한 해상도로 테스트하여 크기, 위치 및 적중 대상이 예상대로 작동하는지 확인하세요.

공용 언어 런타임

다음 표에서는 Windows Phone OS 7.1 및 Windows Phone 8 플랫폼 간 공용 언어 런타임의 앱 호환성 문제를 보여 줍니다.

기능

변경

영향/해결 방법

종료

Windows Phone 8 에는 Windows Phone OS 7.1 과 완전히 다른 가비지 수집기가 있습니다.

특정 개체 종료 순서를 사용하는 코드는 손상될 수 있습니다. 특정 종료 순서에 대한 종속성을 제거해야 합니다. 또한 사용자 정의 종료자의 코드에서 관리되는 데이터 멤버를 호출하면 안 됩니다.

부동 소수점 비교

Windows Phone OS 7.1 및 Windows Phone 8 의 반올림 동작 차이 때문에 부동 소수점 값이 다를 수도 있습니다. 특히 상수와 부동 소수점 계산 결과로 같음 비교를 수행할 때 이러한 차이가 명확해집니다.

일반적으로 부동 소수점 계산을 사용한 직접 비교는 수행하지 않는 것이 좋습니다.

복수 모듈 어셈블리 로드 지원

Windows Phone OS 7.1 에서는 공용 언어 런타임이 복수 모듈 어셈블리를 로드하지만 Windows Phone 8 에서는 로드하지 않습니다.

복수 모듈 어셈블리는 여러 파일에 저장된 관리되는 어셈블리입니다. 복수 모듈 어셈블리는 매우 드물게 사용되므로 이 변경으로 인한 호환성 문제는 거의 없습니다. 복수 모듈 어셈블리는 단일 어셈블리로 컴파일된 .NET 모듈 파일이 아닙니다.

혼합 모드 어셈블리(데스크톱 버전의 .NET Framework를 대상으로 하는 어셈블리) 추가 지원

Windows Phone OS 7.1 에서는 로드되지 않은 혼합 모드 이진 파일이 포함된 앱이 성공적으로 실행되지만 Windows Phone 8 에서는 실행되지 않습니다.

Windows Phone 8 에서 성공적으로 실행하려면 혼합 모드 이진 파일을 앱에서 제거해야 합니다.

스레딩(.NET 스레드 풀, .NET 스레드 예약 정책, 운영 체제 예약 정책)

Windows Phone OS 7.1 에서는 앱이 단일 코어에서 실행되며 스케줄러가 덜 적극적으로 단일 코어의 스레드 시간 분할을 수행합니다. Windows Phone 8 에서는 응용프로그램이 여러 코어에서 실행될 수 있으며 스케줄러가 더 적극적으로 스레드 시간 분할을 수행합니다.

Windows Phone OS 7.1 보다 Windows Phone 8 에서 경합 상태 및 다른 동시성 버그가 발생할 가능성이 더 큽니다. 이 문제를 해결하려면 개발자가 올바른 다중 스레드 코드를 작성해야 합니다.

CIL(Common Intermediate Language) 메서드 크기

Windows Phone 8 에서는 메서드의 CIL 크기에 256KB 제한이 있습니다.

Windows Phone OS 7.1 에서 성공한 앱 설치가 Windows Phone 8 에서 실패할 수도 있습니다. 이 차이의 영향을 받는 앱 수는 매우 적습니다.

private 중첩 클래스에 대한 액세스

Windows Phone OS 7.1 에서는 클래스가 private 중첩 클래스에 액세스할 수 있지만 Windows Phone 8 에서는 액세스할 수 없습니다.

private 중첩 클래스에 대한 액세스가 지원되지 않습니다.

메서드 본문에서 this 포인터에 액세스하지 않고 정적 멤버만 호출하는 임의의 인라인 가능한 봉인 인스턴스 메서드입니다.

Windows Phone 8 에서는 메서드 호출 시 NullReferenceException이 발생합니다. Windows Phone OS 7.1 에서는 런타임에 정적 메서드를 호출할 수 있지만 관리되는 디버거에서 NullReferenceException이 발생합니다.

이 동작은 CLI 사양을 준수합니다. null 참조에서 메서드를 호출할 때 발생하는 NullReferenceException을 처리하거나, null 개체에서 인스턴스 메서드를 호출하지 않아야 합니다.

인스턴스 필드 읽기 및 쓰기

인스턴스 필드 읽기는 JIT 컴파일러에 의해 최적화됩니다.

개별 스레드에서 인스턴스 필드를 읽고 쓰는 응용프로그램에서 오류가 발생할 수 있습니다. 이러한 필드는 C# volatile 키워드로 표시해야 합니다.

.NET Framework 클래스 라이브러리

다음 표에서는 Windows Phone OS 7.1 및 Windows Phone 8 플랫폼 간 .NET Framework 클래스 라이브러리의 앱 호환성 문제를 보여 줍니다.

기능

변경

영향/해결 방법

Array.GetLowerBound(Int32) 메서드

dimension 매개 변수가 Array.Rank와 같은 경우 Windows Phone OS 7.1 에서는 0이 반환되고 Windows Phone 8 에서는 IndexOutOfRangeException 예외가 발생합니다.

IndexOutOfRangeException은 문서화된 동작입니다. Windows Phone OS 7.1 동작을 사용하는 모든 앱에서 예외를 처리해야 합니다.

Double.NaN 또는 Single.NaN을 정수로 변환

Windows Phone OS 7.1 과 Windows Phone 8 에서 결과 정수 값이 다릅니다.

CLI 사양에 따라 변환 결과는 지정하지 않습니다.

Monitor.EnterMonitor.Wait

인스턴스 필드에 모니터 잠금을 설정하면 사용자 코드에서 필드를 새 값으로 바꿉니다. 타이밍에 따라 다른 스레드가 필드에 잠금 또는 펄스를 설정하려고 하면 이 스레드가 잠금을 설정하지 않은 개체에서 작업할 수 있습니다.

이러한 메서드를 잘못 사용하면 교착 상태, 예외 또는 일관성 없는 상태 수정이 발생할 수 있습니다. 이 문제를 해결하려면 다른 개체를 사용하여 동기화합니다.

Type.BaseType 속성

Windows Phone OS 7.1 에서 이 속성은 제네릭 형식 정의를 반환합니다. Windows Phone 8 에서는 제네릭 형식 인수를 반영합니다.

이 변경 사항의 영향은 최소화됩니다.

Type.GetMember 메서드

Windows Phone OS 7.1 에서 생성자를 반환하려면 문자열 매개 변수가 클래스 이름과 같아야 합니다. Windows Phone 8 에서는 ".ctor"이어야 합니다.

이 변경 사항의 영향은 최소화됩니다.

Type.GetType 메서드

형식 이름에 잘못된 문자가 포함된 경우 Windows Phone OS 7.1 에서는 TypeLoadException 예외가 발생하고 Windows Phone 8 에서는 ArgumentException 예외가 발생합니다.

이 변경 사항의 영향은 최소화됩니다.

Environment.SpecialFolder.Favorites 열거형 멤버

Windows Phone OS 7.1 에서 이 열거형 멤버의 값은 22이고 Windows Phone 8 에서는 6입니다.

사용자 코드에서 이 인수가 필요한 메서드를 호출할 수 없으므로 이 변경 사항의 영향은 없습니다.

IsolatedStorageFile 파일 이름 및 IsolatedStorageFile.GetFileNames 메서드

Windows Phone OS 7.1 에서는 파일 이름이 점(".")으로 끝날 수 있으며, GetFileNames("*.")를 통해 이름이 점으로 끝나는 파일만 검색합니다. Windows Phone 8 에서는 이러한 작업이 예외를 발생합니다.

점으로 끝나지 않도록 파일 이름을 바꿉니다. 모든 파일을 검색하려면 GetFiles("*")를 호출합니다.

IsolatedStorageFile.GetFileNames(String) 메서드

반환된 배열의 파일 순서가 Windows Phone OS 7.1 과 Windows Phone 8 에서 다를 수도 있습니다.

특정 순서를 사용하는 앱은 손상될 수 있습니다. 파일 시스템 순서 지정은 보증되지 않습니다.

FileShare.None을 사용하여 스트림이 열린 IsolatedStorageFileStream

가비지 수집 차이 때문에 강력한 참조를 모두 해제하기 전에 스트림에서 Dispose를 호출하지 않은 Windows Phone OS 7.1 의 코드는 적절한 시간에 가비지 수집 및 종료되지 않습니다. 따라서 해당 파일에 대해 다른 스트림을 열 수 없습니다.

응용프로그램에서 using 문을 사용하여 개체가 올바르게 삭제되도록 해야 합니다.

System.Reflection.Emit.ILGenerator.syncObj 필드

Windows Phone OS 7.1 에서 syncObj는 보호된 내부 필드입니다. Windows Phone 8 에는 이 필드가 없습니다.

이 변경 사항의 영향은 없습니다.

Mutex 클래스

Windows Phone OS 7.1 에서는 한 프로세스가 공유 뮤텍스를 유지하는 동안 종료될 경우 다른 프로세스에서 해당 뮤텍스를 취득할 수 있지만 Windows Phone 8 에서는 예외가 발생합니다.

이 변경 사항의 영향은 최소화됩니다. 변경을 해결하기 위해 첫 번째 프로세스에서 뮤텍스를 중단할 수 없거나 두 번째 프로세스에서 뮤텍스를 획득하려고 할 때 발생한 예외를 처리할 수 있습니다.

ParameterBuilder.SetCustomAttribute(ConstructorInfo, Byte[]) 메서드

Windows Phone 8 의 사용자 코드에서는 이 메서드를 사용할 수 없습니다.

이 변경 사항의 영향은 최소화됩니다. Windows Phone OS 7.1 에서는 DynamicMethod 클래스를 통해서만 이 특성을 사용할 수 있으므로 제한된 유틸리티의 특성이 됩니다.

Single을 사용한 계산의 정밀도

Windows Phone OS 7.1 에서는 복합 부동 소수점 계산의 중간 결과에 상위 배정밀도를 사용합니다. Windows Phone 8 에서는 하위 부동 소수점 정밀도를 사용합니다.

단일 값을 사용한 부동 소수점 계산 결과가 Windows Phone OS 7.1 과 Windows Phone 8 에서 다른 경우가 있습니다. 이 경우 계산을 수행하기 전에 명시적으로 Double로 캐스팅합니다.

URI의 BitmapImage 요청으로 설정된 참조자 헤더 값

Windows Phone OS 7.1 에서 URI의 BitmapImage 요청으로 설정된 참조자 헤더의 값은 file:///Applications/Install/<GUID>/Install/ 형식으로 앱의 설치 디렉터리를 참조합니다.

Windows Phone 8(8.0.10322.0) 이전에 출시된 Windows Phone 버전에서, 참조자 헤더의 값은 다른 형식으로 앱의 설치 디렉터리를 참조합니다. 이러한 현상은 Windows Phone OS 7.1 및 Windows Phone 8 모두를 대상으로 하는 앱에서 발생합니다.

이 문제는 Windows Phone 8(8.0.10322.0)에서 해결되었습니다.

  • Windows Phone OS 7.1 을 대상으로 하는 앱의 경우에는 참조자 헤더가 Windows Phone OS 7.1 에서와 같습니다.

  • Windows Phone 8 을 대상으로 하는 앱의 경우에는 참조자 헤더가 전송되지 않습니다. 이 동작은 Windows Phone 8 의 WebClient 클래스 동작과 일치합니다.

참조자 헤더의 값에 의존하는 응용프로그램은 손상될 수 있습니다.

이 문제를 해결하려면, 참조자 헤더에 대해 사용자 지정 값을 지정합니다. 한 가지 가능한 해결 방법을 보려면 WP7 Mango: 사용자 지정 참조자 헤더 이미지 다운로드를 참조하세요.

String.GetHashCode

Windows Phone OS 7.1 과 Windows Phone 8 에서 동일한 문자열에 대해 다른 해시 코드를 반환합니다.

특정 문자열이 특정 해시 코드를 가져야 하는 응용프로그램은 손상됩니다.

Type.GetProperties

반환된 PropertyInfo 배열의 속성 순서가 다릅니다.

직렬화 코드 등 배열 요소의 고정 순서를 사용하는 코드로 인해 응용프로그램이 손상될 수 있습니다. 개발자가 속성 순서에 대한 종속성을 제거해야 합니다.

WaitHandle.WaitAll 메서드

Windows Phone 8 에서는 메서드가 지원되지만 Windows Phone OS 7.1 에서는 NotSupportedException 예외가 발생합니다.

이 변경 사항은 앱 코드가 NotSupportedException 예외 처리에 종속되는 드문 경우에 영향을 줍니다.

XmlSerializer

XmlSerializer 클래스에는 Windows Phone OS 7.1 및 Windows Phone 8 에서 어떤 입력이 유효한지에 대한 여러 가지 규칙이 있습니다. 이러한 차이 중 일부는 특수 모드로 적용됩니다. .NET Framework의 특수 모드 동작을 참조하세요.

재컴파일된 소스 코드에서 XmlSerializer를 사용하여 Windows Phone 8 을(를) 대상으로 지정하려면:

  1. Value 속성에서 XmlAttributeAttribute 특성을 제거합니다.

  2. 특성에서 XML의 값을 다음 예제에 표시된 요소로 변경합니다.

    <SerializedClass>

    <Value>42</Value>

    </SerializedClass>

XmlSerializer.Deserialize(TextReader)

textReader 인수가 null인 경우 Windows Phone 8 에서는 메서드가 ArgumentNullException 예외를 발생하고 Windows Phone OS 7.1 에서는 InvalidOperationException을 발생합니다.

메서드에 null이 전달된 경우 ArgumentNullException 예외를 처리해야 합니다.

XmlSerializer.Serialize(TextWriter, Object)XmlSerializer.Serialize(TextWriter, Object, XmlSerializerNamespaces)

textWriter 인수가 null인 경우 Windows Phone 8 에서는 메서드가 ArgumentNullException 예외를 발생하고 Windows Phone OS 7.1 에서는 NullReferenceException을 발생합니다.

메서드에 null이 전달된 경우 ArgumentNullException 예외를 처리해야 합니다.

다음 단원에서는 .NET Framework for Windows Phone 및 공용 언어 런타임 기능의 특수 모드 동작을 보여 줍니다.

공용 언어 런타임

다음 표에서는 공용 언어 런타임의 특수 모드 동작을 보여 줍니다.

기능 또는 영역

Windows Phone 8 동작

특수 모드 동작

어셈블리 바인딩: 문화권

바인더가 앱 어셈블리에 중립 문화권이 있는지 확인합니다.

바인더가 문화권별 리소스가 있는 어셈블리에 바인딩할 수 있습니다.

어셈블리 바인딩: 버전 번호

서명되지 않은 어셈블리가 어셈블리 바인딩에 버전 번호를 사용합니다.

버전 번호가 무시됩니다.

JIT(Just-In-Time) 인라인

JIT 컴파일러가 Windows Phone 8 에 고유한 인라인 규칙 집합을 따릅니다.

JIT 컴파일러가 Windows Phone OS 7.1 에서 사용하는 규칙 집합을 따릅니다.

클래스별 정적 데이터에 대한 메모리 할당

클래스별 정적 데이터의 총 크기에는 제한이 없습니다.

클래스의 정적 데이터 크기가 64K를 초과하면 런타임에서 TypeInitializationException 예외를 발생합니다.

런타임 로더 동작: 화면 표시가 다른 값 형식의 겹치는 필드

값 형식의 겹치는 필드에 대한 화면 표시가 다른 경우 로더에서 TypeLoadException 예외를 발생합니다.

로더에서 값 형식의 겹치는 필드가 다른 화면 표시를 가질 수 있도록 합니다.

런타임 로더 동작: x86 관련 이미지

ARM 시스템에서 x86 관련 CIL(Common Intermediate Language) 이미지를 로드할 수 없습니다.

ARM 시스템에서 x86 관련 CIL 이미지를 로드할 수 있습니다.

런타임 로더 동작: 형식 정의의 고유성

중복 형식 정의가 허용되지 않습니다. Windows Phone OS 7.1 코드를 성공적으로 다시 컴파일하고 실행하려면 난독 처리된 코드를 사용하지 않거나 난독 처리기를 변경하세요.

난독 처리기에서 생성된 중복 형식 정의를 반복할 수 있습니다.

런타임 로더 동작: 정적 필드의 잘못된 사용자 지정 특성

런타임에서 BadImageFormatException을 발생합니다.

잘못된 특성을 무시합니다.

TypeAttributes.BeforeFieldInit 플래그가 있는 정적 생성자

생성자가 지연 실행됩니다.

생성자가 지연 실행되지 않습니다.

.NET Framework 클래스 라이브러리

다음 단원에서는 .NET Framework 클래스 라이브러리의 형식 및 멤버에 대한 특수 모드 동작을 보여 줍니다.

형식 또는 멤버

Windows Phone 8 동작

Windows Phone OS 7.1 특수 모드 동작

Activator.CreateInstance 메서드에 배열 형식 전달

메서드가 MissingMethodException 예외를 발생합니다.

메서드에서 길이가 0인 배열을 반환합니다.

Array.BinarySearch<T>(T[], T), Array.Sort<T>(T[]), Array.Sort<TKey, TValue>(TKey[], TValue[], Int32, Int32, IComparer<TKey>)

Windows Phone 8 에 고유한 정렬 알고리즘을 사용합니다.

Windows Phone OS 7.1 에 고유한 정렬 알고리즘을 사용합니다.

Assembly.FullName 속성

null 이름의 경우 속성이 String.Empty를 반환합니다.

속성이 정규화된 형식 이름("System.Reflection.AssemblyName")을 반환합니다.

Assembly.GetType 메서드

메서드가 호출된 어셈블리에서만 지정한 형식을 검색합니다.

메서드가 호출된 어셈블리 및 mscorlib.dll에서 지정한 형식을 검색합니다.

Assembly.GetTypeModule.GetType 메서드

형식 이름에 정규화된 어셈블리 이름을 포함할 수 없습니다.

형식 이름에 정규화된 어셈블리 이름을 포함할 수 있습니다.

Load 메서드

어셈블리 이름에서 아포스트로피('), 따옴표("), 쉼표(,), 등호(=) 등의 특수 문자를 이스케이프해야 합니다. 그렇지 않으면 어셈블리를 로드할 수 없으며 예외가 발생합니다.

어셈블리 이름에 이스케이프되지 않은 특수 문자를 사용할 수 있습니다.

Load

어셈블리의 정규화된 이름이 "+"로 시작할 수 없습니다.

어셈블리의 정규화된 이름이 "+"로 시작할 수 있습니다.

AssemblyName.GetPublicKey 메서드

공개 키가 없는 어셈블리의 경우 메서드가 null을 반환합니다.

메서드가 Byte[0]을 반환합니다.

IComparable을 구현하며 기본 클래스가 IComparable<T>을 구현하는 파생 클래스에 대한 Array.Sort 메서드 호출 등의 비교 작업(여기서 T는 기본 클래스임)

기본 클래스 CompareTo(T) 구현이 호출됩니다.

파생 클래스 CompareTo(Object) 구현이 호출됩니다.

PropertyInfo 형식의 element 인수 및 true와 같은 inherit 인수를 사용한 Attribute.GetCustomAttribute(MemberInfo, Type, Boolean)Attribute.GetCustomAttributes(MemberInfo, Boolean) 호출

메서드가 public 및 public이 아닌 부모 속성에서 특성을 검색합니다.

메서드가 public 부모 속성에서만 특성을 검색합니다.

CompilationRelaxations.NoStringInterning 열거형 멤버가 포함된 CompilationRelaxationsAttribute 특성

특성에서 어셈블리의 문자열 리터럴이 내부 풀에 추가되지 않도록 지정합니다.

특성이 무시됩니다.

ConstructorInfo.Invoke 메서드

개방형 제네릭 형식의 생성자를 호출하려고 하면 MemberAccessException 예외가 발생합니다.

메서드 호출이 ArgumentException 예외를 발생합니다.

Convert.FromBase64CharArray 메서드

inArray 매개 변수가 길이 0의 문자 배열인 경우 메서드가 FormatException 예외를 발생합니다.

메서드가 빈 바이트 배열(길이가 0인 바이트 배열)을 반환합니다.

CultureInfo.CultureInfo(String) 메서드

문화권 이름이 잘못된 경우 생성자가 ArgumentException 예외를 발생합니다.

생성자를 호출하면 PlatformNotSupportedException 예외가 발생합니다.

CultureInfo.CultureInfo(String) 메서드

iw 및 tl이 잘못된 문화권 이름입니다.

iw 및 tl이 유효한 문화권 이름이며 각각 he(히브리어) 및 fil(필리핀어) 문화권과 같습니다.

CultureInfo.CultureInfo(String) 메서드

bn(벵골어), bn-BD(벵골어(방글라데시)) 및 bn-IN(벵골어(인도)) 문화권이 지원되지 않습니다.

bn, bn-BD 및 bn-IN 문화권이 지원되지 않으므로 생성자에서 예외를 발생합니다.

CultureInfo.InvariantCulture.DisplayName 속성

속성이 "Invariant Language (Invariant Country)"를 반환합니다.

속성이 "Invariant Language"를 반환합니다.

Attribute.IsDefinedGetCustomAttributes 메서드 호출 등의 사용자 지정 특성 데이터 검색

특성 유형을 로드할 수 없는 경우 메서드가 예외를 발생합니다.

메서드 호출이 무시됩니다.

DataContractSerializer 클래스

XML 요소를 사전순으로 정렬해야 합니다.

XML 요소의 순서를 지정할 수 없습니다.

DateTime.Now.TimeOfDay.TotalMillisecond 속성

값이 100나노초 내에서 정확합니다.

값이 1밀리초 내에서 정확합니다.

DebuggableAttribute 특성

특성이 런타임에서 디버깅 정보를 제공하기 위해 모듈 내에서 코드의 특수 처리를 제공하도록 지시합니다.

특성이 무시됩니다.

Delegate.CreateDelegate 메서드

잘못된 인수로 대리자를 만들려고 하면 MissingMethodException이 발생합니다.

메서드가 null을 반환합니다.

Delegate.CreateDelegate 메서드

제네릭이 아닌 형식에서 제네릭 메서드의 대리자를 만들려고 하면 ArgumentException 예외가 발생합니다.

메서드가 MissingMethodException 예외를 발생합니다.

Enum.IsDefined 메서드

value 인수가 정수 계열 형식이나 문자열이 아닌 경우 메서드가 InvalidOperationException 예외를 발생합니다.

메서드가 ArgumentException 예외를 발생합니다.

예외 필터

필터 끝에 있는 단일 종단 필터(OpCodes.Endfilter) 명령이 지원되거나 InvalidProgramException 예외가 발생합니다.

필터 끝에 있는 여러 종단 필터 명령이 허용됩니다. 이러한 명령은 일반적으로 난독 처리기에서 내보냅니다.

FieldInfo.GetValueFieldInfo.SetValue 메서드

null 값이 나타내는 개체의 인스턴스 필드 값을 가져오거나 설정하려고 하면 TargetException 예외가 발생합니다.

메서드 호출이 ArgumentNullException 예외를 발생합니다.

FieldInfo.ToString 메서드

Boolean 필드에 대한 반환 값은 "Boolean"이고 Int32 필드에 대한 반환 값은 "Int32"입니다.

Boolean 필드에 대한 반환 값은 "System.Boolean"이고 Int32 필드에 대한 반환 값은 "System.Int32"입니다.

FileLoadException.Data 속성

반환된 IDictionary 개체에 HRESULT가 포함되지 않습니다.

반환된 IDictionary 개체에 HResult라는 HRESULT가 포함됩니다.

IsolatedStorageFile.FileExists(String) 메서드

null이 전달된 경우 메서드가 ArgumentNullException 예외를 발생합니다.

메서드가 false를 반환합니다.

IsolatedStorageFile.GetFileNames(String)IsolatedStorageFile.GetDirectoryNames(String) 메서드

searchPattern 매개 변수가 리터럴 문자열 및 와일드카드 문자로 구성되고 메서드가 표준 파일 비교를 수행합니다.

메서드가 이전 버전의 Windows Phone에서와 마찬가지로 파일을 searchPattern과 비교합니다.

IsolatedStorageFileIsolatedStorageFileStream 클래스

존재하지 않거나 하나 이상의 하위 디렉터리가 누락된 경로에서 작업을 수행하려고 하면 IsolatedStorageException 예외가 발생합니다.

이러한 경로에서 작업을 수행하려고 하면 DirectoryNotFoundException 예외가 발생합니다.

MethodInfo.Invoke 메서드

호출된 메서드에 매개 변수의 기본값이 없는 경우 ArgumentException 예외가 발생합니다.

예외가 발생하지 않습니다.

Mutex 클래스

뮤텍스 이름에 백슬래시 문자를 포함할 수 없습니다.

뮤텍스 이름에 백슬래시 문자를 사용할 수 있으며 런타임에 다른 문자로 바뀝니다.

NeutralResourcesLanguageAttribute 특성

응용프로그램의 기본 리소스를 제공하는 문화권을 정의합니다.

특성이 무시됩니다. 고정 문화권에서 응용프로그램의 기본 리소스를 제공합니다.

NeutralResourcesLanguageAttribute 메서드

location 매개 변수가 앱의 기본 대체 리소스 위치를 결정합니다.

location 매개 변수가 무시됩니다.

NotifyCollectionChangedEventArgs

시작 인덱스가 올바르게 업데이트됩니다.

시작 인덱스가 올바르게 업데이트되지 않고 일부 컨트롤이 이 동작을 사용합니다.

NotifyCollectionChangedEventArgs.NewItems

속성 값이 읽기 전용 ArrayList 개체입니다.

속성 값이 Object 배열입니다.

ObjectDisposedException.ObjectName 속성

ObjectDisposedException() 생성자의 오버로드 중 하나에 전달된 개체 이름이 null인 경우 속성이 Empty를 반환합니다.

속성이 null을 반환합니다.

ParameterInfo.DefaultValue 속성

매개 변수에 기본값이 없으면 속성이 Value를 반환합니다.

속성이 null을 반환합니다.

GetDirectoryName(String) 메서드

메서드가 중복 ".", " " 및 "\" 문자를 제거하여 경로를 정규화합니다.

경로가 정규화되지 않습니다. 메서드가 반환될 문자열을 최대 경로 길이와 비교만 합니다.

WebClient에 의해 설정된 참조자 헤더 값

참조자 헤더는 기본적으로 전송되지 않습니다. 참조자 헤더에 대해 사용자 지정 값을 지정할 수 있습니다.

이 동작은 Windows Phone 8(8.0.10322.0) 이상의 BitmapImage 클래스 동작과 일치합니다.

참조자 헤더의 값은 file:///Applications/Install/<GUID>/Install/ 형식으로 앱의 설치 디렉터리를 참조합니다.

리소스 대체

기본 대체 문화권이 운영 체제에서 기본적으로 사용하는 대체 문화권입니다.

기본 문화권이 NeutralResourcesLanguageAttribute 특성에 의해 정의됩니다.

GetNeutralResourcesLanguage(Assembly) 메서드

메서드가 NeutralResourcesLanguageAttribute 특성에 정의된 어셈블리의 기본 문화권을 반환합니다. 그렇지 않으면 InvariantCulture를 반환합니다.

메서드가 항상 InvariantCulture를 반환합니다.

RuntimeHelpers.InitializeArray 메서드

난독 처리된 휴대폰 앱에서 확인이 실패합니다.

난독 처리된 휴대폰 앱에서 확인이 성공합니다.

RunWorkerCompletedEventArgs.Result 속성

비동기 작업 중에 오류가 발생하면 속성이 TargetInvocationException 예외를 발생시키고 TargetInvocationExceptionInnerException 속성에는 예외에 대한 정보가 포함됩니다.

예외가 직접 발생되고 TargetInvocationException 예외에 래핑되지 않습니다.

BeginRead, BeginWrite, EndRead, EndWrite 및 서브클래싱된 메서드

입력/출력 작업이 비동기적으로 수행됩니다.

입력/출력 작업이 동기적으로 수행됩니다.

System.IO.StreamReader 클래스

버퍼 크기를 명시적으로 지정하지 않고 인스턴스화된 개체의 기본 버퍼 크기가 1,024바이트입니다.

기본 버퍼 크기가 4,096바이트입니다.

StreamWriter.CloseStreamWriter.Dispose 메서드

StreamWriter 개체가 스트림을 사용하여 인스턴스화된 경우 StreamWriter 인스턴스를 닫으면 내부 스트림이 플러시되고 삭제됩니다.

내부 스트림이 여러 StreamWriter 개체에서 공유되는 경우 플러시 및 삭제 작업이 수행되지 않습니다.

String.Replace(String, String)

포함된 null(U+0000)이 다른 문자처럼 처리됩니다.

Windows Phone OS 7.1 이 이전 버전에 특수 모드를 적용했으며 포함된 null 뒤의 모든 문자가 삭제되었습니다. 이 특수 모드가 Windows Phone 8 에도 적용됩니다.

String.Trim

바이트 순서 표시가 지우기 작업에서 제거되지 않습니다.

바이트 순서 표시가 공백으로 처리되고 지우기 작업에서 제거됩니다.

StringBuilder.Append(Char[], Int32, Int32)StringBuilder.Append(String, Int32, Int32) 메서드

count 매개 변수가 0인 경우 메서드가 ArgumentOutOfRangeException 예외를 발생합니다.

메서드가 변경되지 않은 StringBuilder 인스턴스 값을 반환합니다.

SynchronizationContext.Current 속성

속성이 스레드별 SynchronizationContext 개체를 반환합니다.

속성이 모든 스레드에 대해 동일한 SynchronizationContext 개체를 반환합니다.

Thread.CurrentCultureThread.CurrentUICulture 속성

현재 문화권과 현재 UI 문화권의 변경 내용이 현재 스레드에만 영향을 줍니다.

현재 문화권과 현재 UI 문화권의 변경 내용이 모든 앱 스레드에 영향을 줍니다.

TimeSpan.ToString(String)TimeSpan.ToString(String, IFormatProvider) 메서드

formatprovider 매개 변수가 문화권을 구분하는 결과 문자열을 생성합니다.

formatprovider 매개 변수가 무시됩니다.

Type.GetMethod, Type.GetMethods, PropertyInfo.GetGetMethod, PropertyInfo.GetSetMethod

메서드가 비공개 상속 메서드를 반환하지 않습니다.

메서드가 비공개 상속 메서드를 반환합니다.

Type 배열 매개 변수가 있는 Type.GetProperty 메서드 오버로드

배열의 임의 요소가 null인 경우 메서드가 ArgumentNullException 예외를 발생합니다.

메서드가 NullReferenceException 예외를 발생합니다.

Type.GetPropertyType.GetProperties 메서드

현재 인스턴스가 현재 형식에서 숨겨진 기본 클래스의 속성을 가진 제네릭 형식인 경우 메서드가 AmbiguousMatchException 예외를 발생합니다.

메서드가 속성을 검색합니다.

BindingFlags 형식의 매개 변수가 있는 Type.GetPropertyType.GetProperties 메서드

메서드가 기본 클래스의 재정의된 속성을 반환하지 않습니다.

메서드가 기본 클래스의 재정의된 멤버를 반환할 수 있습니다.

Type.GetType 메서드

빈 문자열이 전달된 경우 메서드가 ArgumentException 예외를 발생합니다.

메서드가 TypeLoadException 예외를 발생합니다.

Type.MakeByRefType 메서드에 참조 형식 전달

메서드가 null을 반환합니다.

메서드가 TypeLoadException 예외를 발생합니다.

Uri.Uri 메서드

어셈블리에 포함된 파일 또는 리소스를 참조하는 상대 URI를 기준으로 Uri 개체를 인스턴스화하려고 하면 UriFormatException 예외가 발생합니다.

어셈블리에 포함된 파일 또는 리소스를 참조하는 상대 URI가 지원됩니다.

Version.CompareTo(Object) 메서드

version 인수가 String인 경우 메서드가 ArgumentException 예외를 발생합니다.

메서드가 InvalidCastException 예외를 발생합니다.

Version.CompareTo(Object) 메서드

version 인수가 null인 경우 메서드가 1을 반환합니다.

메서드가 ArgumentOutOfRangeException 예외를 발생합니다.

WaitHandle.WaitAll

지정한 개체를 기다립니다. WaitAll 호출이 차단될 수 있습니다.

메서드가 기다리지 않고 true를 반환합니다.

X509Certificate.X509Certificate(Byte[], String)X509Certificate.X509Certificate(Byte[], String, X509KeyStorageFlags) 메서드

바이트 배열이 null이거나 0개 요소를 포함하는 경우 생성자가 ArgumentException 예외를 발생합니다.

예외가 발생하지 않습니다.

X509KeyStorageFlags 매개 변수가 있는 X509Certificate.X509CertificateX509Certificate.Import 메서드

플래그가 잘못된 경우 개체 만들기 생성자 또는 메서드가 ArgumentException 예외를 발생합니다.

생성자 또는 메서드가 NotSupportedException 예외를 발생합니다.

XmlElementAttribute.ElementName 속성

이름이 고유하지 않으면 XML 직렬 변환기에서 InvalidOperationException 예외를 발생합니다.

중복 요소 이름이 허용됩니다.

XmlSerializer 클래스

직렬화된 형식에 기본(매개 변수 없음) 생성자가 있어야 합니다.

직렬화된 형식에 기본 생성자가 없어도 됩니다.

XmlSerializer 클래스

기본적으로 XML 직렬화에서 XML이 UTF-8로 인코딩되고 encoding=utf-8 특성을 내보낸다고 가정합니다.

직렬 변환기에서 인코딩 특성을 내보내지 않습니다.

XmlSerializer 클래스

파생 형식이 기본 형식과 동일한 이름으로 멤버를 정의하는 경우 직렬 변환기가 예외를 발생합니다.

직렬 변환기에서 파생 형식이 기본 형식과 동일한 이름으로 멤버를 정의할 수 있게 합니다.

XmlSerializer 클래스

Nullable<T> 형식의 속성을 가진 형식을 직렬화할 수 없습니다.

형식의 속성을 가진 형식을 직렬화할 수 있습니다.

XmlSerializer 클래스

빈 XML 파일을 역직렬화하려고 하면 예외가 발생합니다.

예외가 발생하지 않습니다.

XmlSerializer 클래스

직렬 변환기에서 XmlRootAttribute 특성을 사용하여 요소 데이터에 태그가 지정되어야 합니다.

XmlRootAttribute 특성이 없는 경우 요소 데이터에 XmlArrayItemAttribute를 적용할 수 있습니다.

XmlSerializer.Deserialize 및 다른 XML 읽기 작업

읽기 작업이 바이트 스트림 끝에 있는 후행 null을 모두 반환합니다.

읽기 작업이 바이트 스트림 끝에 있는 후행 null을 모두 삭제합니다.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft