Windows 8 런타임 (WinRT / Windows Store 앱 / Windows 10 Universal App)은 Silverlight 및 WPF와 어떻게 다릅니 까? [닫은]


353

Metro 스타일 앱 을 만드는 데 사용되는 새로운 Windows 8 런타임을 사용하려고 합니다. XAML 과 함께 사용할 수 있으며 .NET을 기반으로하므로 C # 및 VB.NET을 사용하여 앱을 작성할 수 있지만 HTML, CSS, DOM 및 JavaScript와 관련이있는 것으로 보입니다.

누군가가 .NET UI 프로그래머가 이해할 수있는 용어로 몇 단락으로 설명 할 수 있습니까? (나는 그것을 이해하는 데 필요한“열쇠”가 빠져있다.)


우리는 모두 WPF, Silverlight , Windows Forms 등이 최소한 Intel 시스템에서 Windows 8 (및 Windows 10)에서 계속 작동 한다는 것을 알고 있으므로 말하지 마십시오 ...


22
그것은 .NET에 기반을 두지 않고 그것에 노출되어 있습니다 (COM interop와 비슷하지만 훨씬 더 완벽합니다 ...
Pavel Minaev

WinRT를 플랫폼 (ABI, 개체 모델 등)으로 요청하고 있습니까?이 경우 COM 또는 .NET과 비교하거나 UI 용 라이브러리를 포함하여 WinRT 표준 클래스 라이브러리와 비교하는 것이 더 합리적입니까?
Pavel Minaev

1
COM과 유사한 기본 기술, 객체 모델 등과 해당 기술을 사용하여 구현 된 특정 라이브러리를 구별해야합니다. 후자의 경우에도 모든 표준 라이브러리가 UI 라이브러리 인 것은 아닙니다. VS의 객체 브라우저를 보면 Windows.*네임 스페이스가 다루는 광범위한 기능을 볼 수 있습니다 . WinRT는 기술과 전체 표준 라이브러리 세트를 모두 참조하므로 지금까지 용어는 다소 혼란 스럽습니다. UI 라이브러리 ( Windows.UI.*)에 대한 간결한 레이블이 없다고 생각 합니다.
Pavel Minaev

@ TrueWill : 세 가지를 모두 배우는 것이 더 합리적이므로 지식이보다 균형 잡히고 주어진 문제에 가장 적합한 솔루션을 결정할 수 있습니다. 세 가지 중 하나만 배우지 마십시오.
Chris Charabaruk

2
@TrueWill : Silverlight는 향후 릴리스를 제공하지 않습니다. zdnet.com/blog/microsoft/microsoft-releases-silverlight-5/…
Sabuncu

답변:


479

가장 낮은 수준에서 WinRT는 ABI 수준에서 정의 된 개체 모델입니다. COM을 기본으로 사용하므로 모든 WinRT 개체가 구현 IUnknown및 재 계산을 수행합니다. 예를 들어, WinRT 객체 모델에는 델리게이트가 있고 이벤트는 .NET 스타일 (델리게이트 및 가입자 추가 / 제거)과 같이 수행됩니다. 이벤트 소스 및 싱크의 이전 COM 모델이 아니라 이벤트 당 하나씩). 다른 주목할만한 것들 중 WinRT는 또한 매개 변수화 된 ( "일반적인") 인터페이스를 가지고 있습니다.

또 하나의 큰 변화는 .NET 어셈블리와 마찬가지로 모든 WinRT 구성 요소에 메타 데이터를 사용할 수 있다는 것입니다. COM에서 당신은 일종의 typelibs를 가지고 있었지만 모든 COM 구성 요소가 그런 것은 아닙니다. WinRT의 경우 메타 데이터는 .winmd 파일에 포함되어 있습니다. 개발자 미리보기의 "C : \ Program Files (x86) \ Windows Kits \ 8.0 \ Windows Metadata \"내부를 확인하십시오. 주변을 둘러 보면 실제로 코드가없고 메타 데이터 테이블 만있는 CLI 어셈블리라는 것을 알 수 있습니다. 실제로 ILDASM으로 열 수 있습니다. 그렇다고 WinRT 자체가 관리되는 것은 아닙니다. 단순히 파일 형식 만 재사용합니다.

그런 다음 WinRT 인터페이스와 클래스를 정의하는 해당 객체 모델로 구현 된 많은 라이브러리가 있습니다. 다시, 위에서 언급 한 "Windows Metadata"폴더를보고 무엇이 있는지 확인하십시오. VS에서 Object Browser를 실행하고 프레임 워크 선택기에서 "Windows 8.0"을 선택하여 해당 항목을 확인하십시오. 거기에는 많은 것이 있으며 UI 만 다루지 않습니다 . Windows.Data.Json또는 Windows.Graphics.Printing, 또는 , 또는 같은 네임 스페이스도 얻습니다 Windows.Networking.Sockets.

그런 다음 UI를 다루는 여러 라이브러리를 얻습니다. 주로 Windows.UI또는 아래에 다양한 네임 스페이스가 있습니다 Windows.UI.Xaml. 그들 중 많은 WPF / 실버 네임 스페이스와 매우 유사하다 - 예를 들면 Windows.UI.Xaml.Controls밀접하게 일치한다 System.Windows.Controls; Windows.UI.Xaml.Documents등을 위한 ditto

이제 .NET은 WinRT 구성 요소를 마치 .NET 어셈블리 인 것처럼 직접 참조 할 수 있습니다. COM Interop과는 다르게 작동합니다. interop 어셈블리와 같은 중간 아티팩트가 필요하지 않으며 /r.winmd 파일 만 있으며 메타 데이터의 모든 유형과 해당 멤버는 마치 .NET 개체 인 것처럼 보입니다. WinRT 라이브러리 자체는 완전히 고유합니다 (따라서 WinRT를 사용하는 기본 C ++ 프로그램에는 CLR이 전혀 필요하지 않음). 관리되는 모든 항목을 CLR 자체에 노출시키는 마법은 상당히 낮습니다. .winmd를 참조하는 .NET 프로그램을 사용하는 경우 실제로는 extern 어셈블리 참조처럼 보입니다. 형식 포함과 같은 손으로 속이는 것은 없습니다.

CLR은 WinRT 유형을 가능한 한 해당 유형에 맞게 조정하려고 시도합니다. 그래서 예를 들어 GUID를, 날짜와 URI는되고 System.Guid, System.DateTime그리고 System.Uri각각; 예컨대 WinRT 컬렉션 인터페이스 IIterable<T>IVector<T>하게 IEnumerable<T>하고 IList<T>; 등등. 이것은 두 가지 방법으로 진행됩니다. 구현하는 .NET 개체가 IEnumerable<T>있고이를 WinRT로 다시 전달하면으로 표시됩니다 IIterable<T>.

궁극적으로 이것이 의미하는 바는 .NET Metro 앱이 기존 표준 .NET 라이브러리의 하위 집합 및 (기본) WinRT 라이브러리에 액세스 할 수 있다는 것입니다.이 중 일부는 특히 Windows.UIAPI 방식의 Silverlight와 매우 유사합니다. 여전히 UI를 정의 할 XAML이 있으며 데이터 바인딩, 리소스, 스타일, 템플릿 등 Silverlight와 동일한 기본 개념을 처리합니다. 대부분의 경우 using새로운 네임 스페이스를 통해 Silverlight 앱을 이식 할 수 있습니다. API가 조정 된 코드에서 몇 군데를 조정했습니다.

WinRT 자체는 HTML 및 CSS와 관련이 없으며 .NET에서 수행되는 방식과 유사하게 JavaScript 와도 관련이 있다는 의미에서만 JavaScript와 관련이 있습니다. .NET Metro 앱에서 WinRT UI 라이브러리를 사용할 때 HTML / CSS / JS를 처리 할 필요가 없습니다 (정말 원한다면 WebView컨트롤을 호스팅 할 수 있습니다 ). 모든 .NET 및 Silverlight 기술은이 프로그래밍 모델과 관련이 있습니다.


WPF-WinRT 호환성은 어떻습니까? WPF-Silverlight에 불일치가 있습니까?
Den

5
@Den WPF는 여기서 좋은 비교 기준이 아닙니다. API는 Silverlight에 훨씬 가깝습니다. 그렇게 보면 둘 사이에 불일치가 있지만 규모는 Silverlight와 WPF가 아니라 데스크톱과 WP7 Silverlight에 더 가깝습니다.
Pavel Minaev

11
좋은 대답입니다. WinRT가 NT 커널에 직접 액세스합니까 (OS 지원이 필요한 경우) Win32를 통과합니까?
Timores


66

로부터 빌드 기조 연설 :

기조 연설

HTML / CSS / JavaScript 앱과 C # / XAML 앱 모두에 공통 API를 제공하고 있습니다. C # 및 XAML이 사용되지만 WPF 또는 Silverlight가 아닙니다.


8
새로운 XAML은 C #과 (네이티브) C ++ 모두에서 사용할 수 있으므로 조금 더 복잡합니다. WPF 나 Silverlight는 아니지만 후자에 매우 가깝습니다. 기조 연설에서 알 수 있듯이 기존 Silverlight 코드에서 사용 횟수 및 기타 사소한 리팩토링을 변경하는 것만으로도 벗어날 수 있습니다. 선언적 마크 업, 리소스, 스타일, 템플릿, 데이터 바인딩 등 WPF / Silverlight의 핵심 아이디어가 모두 있습니다. 대부분의 컨트롤도 있습니다.
Pavel Minaev

2
오늘 아침에 더 나은 그래픽이 있지만 다시는 찾을 수 없습니다. 편집 :이 질문에 대한 또 다른 답변 덕분에 발견되었습니다. dougseven.files.wordpress.com/2011/09/win8-new-platform.png
Chris Charabaruk 2018 년

1
슬라이드에서 WPF는 어디에 맞습니까?
paparazzo

1
오른쪽 하단에 .NET / Silverlight 방식으로 그룹화되어 있습니다.
BoltClock

1
기존 작품에 관한 한 그 그림은 크게 틀립니다. "Windows Kernel Services"를 "Win32 kernel32.dll"로 바꾸고 "Win32"를 "Win32 user32.dll + gdi32.dll"로 바꾸면 거의 고칠 수 있지만 IE와 .NET / Silverlight는 대부분 맨 위에 배치되어야합니다. C / C ++ / Java / Delphi / etc뿐만 아니라 user32.dll + gdi32.dll도 kernel32.dll에 도달합니다. 중요한 것은 user32.dll과 gdi32.dll이 WinRT의 기초가 아니며 Windows 스토어 앱이 WinRT를 지나서 kernel32.dll의 모든 기능을 발휘할 수 없다는 것입니다.
벤 Voigt

37

핵심 아이디어는 이제 데스크탑과 메트로의 두 가지 개발 트랙이 있다는 것입니다.

  • 데스크톱은 이전 앱이있는 곳입니다.
  • 새로운 클래스의 응용 프로그램 인 Metro 응용 프로그램은 VB.NET, C # 또는 C ++ 등 다양한 방법으로 구축 할 수 있습니다. 이 세 가지 언어 옵션은 XAML을 사용하여 UI를 빌드 할 수 있습니다. 대안은 UI 및 응용 프로그램 코드 모두를 개발하기 위해 JavaScript / HTML5 / CSS를 사용하는 것입니다.

몇 가지 중요한 사항 :

  • Windows 8은 일종의 고급 휴대 전화 OS와 같은 느낌입니다.
  • Metro에서는 휴대폰에없는 것처럼 최상위 창이 겹치지 않습니다. MDI 스타일 응용 프로그램을 원하면 데스크톱에 그대로 있어야합니다.
  • Metro 스타일 앱은 보이지 않으면 자동으로 일시 중지됩니다. 이것은 배터리 수명을 연장하기 위해 수행되었습니다. 즉, 사용자가 상호 작용하지 않는 동안 백그라운드 처리를 수행하여 Metro로 포팅되는 기존의 많은 데스크톱 앱에는 적합하지 않습니다.
  • ARM 버전의 Windows 8은 데스크톱 응용 프로그램을 지원하지 않습니다. 따라서 앱을 작성하고 모든 버전의 Windows에서 작동하게하려면 Metro 앱이어야합니다.

2
Metro에서는 겹치는 최상위 창이 없습니다. 여전히 Popup( msdn.microsoft.com/en-us/library/windows/apps/… ) 있으므로 원하는 경우 MDI와 비슷한 것을 요리 할 수 ​​있습니다. 터치에 익숙하지 않은 UI로 끝날 위험이 있으므로이를 악용하지 않는 것이 좋습니다.
Pavel Minaev

@Pavel-흥미 롭습니다. 두 개의 최상위 창을 나란히 놓고 겹칠 수는 없다는 것을 의미합니까? 예를 들어, 타 일드 ... 각각 화면의 절반을 공유합니까? 현재 작업중인 WPF 앱에는 이러한 종류의 기능이 필요합니다.
dodgy_coder

3
모든 Metro 앱에는 하나의 최상위 창이 있습니다. 두 개의 Metro 앱을 나란히 실행할 수 있지만 이는 사용자가 결정하는 것입니다. 앱을이 구성으로 강제 실행할 수있는 방법은 없습니다. 또한 두 개의 앱이 나란히 실행 되더라도 서로 통신하기 위해 통신 할 수 없습니다 ( "공유 대상"과 같은 명시적인 사용자 제스처를 통한 경우 제외)
Pavel Minaev

1
반면에, 자신 만의 단일 최상위 창을 원하는만큼 많은 영역으로 세분화하고 크기를 조정할 수있는 이동식 분배기를 제공 할 수 있습니다. 사용자 관점에서는 두 개의 타 일식 최상위 창처럼 보입니다. . 그래도 앱 스위처에서 여전히 단일 항목으로 표시됩니다 (그러나 아마도 원할까요?).
Pavel Minaev

3
Martyn Lovell에 따르면 고의적 인 메커니즘은 없으며 의도적으로 제한 될 수 있습니다. 예를 들어 명명 된 파이프는없고 메모리 매핑 된 파일도 없습니다. 소켓 (서버 소켓 포함)이 있지만에 localhost연결할 때 동일한 앱에만 연결할 수 있습니다. 공유 "알려진 폴더"(문서, 그림 등) 중 하나에서 일반 파일을 사용할 수 있지만 폴링이 필요하고 사용자에게 표시되는 상당히 거친 해킹입니다.
Pavel Minaev

24

정확한 위치를 이해하는 데 도움이되는 수정 된 아키텍처 버전이 있습니다. Telerik 닌자 중 한 명이 CLR 팀과 대화를 나누고 그림을 수정했습니다.

Windows 8 플랫폼 및 도구 (CLR 포함)

CLR이 어디에 있는지 볼 수 있습니다. .NET 프레임 워크에는 이제 두 개의 프로파일이 있습니다.

1- .NET Metro 프로필 (Metro 응용 프로그램을 처리하는 CLR)

2- .NET 클라이언트 프로파일 (C # 및 VB.NET 애플리케이션의 CLR 런타임)

이것이 당신에게 더 명확한 그림을주기를 바랍니다. 나쁜 그림은 천 번의 토론에 가치가 있습니다. 의 전체 기사를 읽으십시오 . .


17

Microsoft의 자세한 내용은 여기 를 참조 하십시오 .

Windows 런타임은 API 메타 데이터 (.winmd 파일)를 사용하여 노출됩니다. 이것은 .NET 프레임 워크 (Ecma-335)와 동일한 형식입니다. 기본 이진 계약을 통해 선택한 개발 언어로 Windows 런타임 API에 직접 쉽게 액세스 할 수 있습니다. Windows 런타임 API의 모양과 구조는 C #과 같은 정적 언어와 JavaScript와 같은 동적 언어로 이해 될 수 있습니다. IntelliSense는 JavaScript, C #, Visual Basic 및 C ++로 제공됩니다.

간단히 말해서 Windows 런타임은 Windows 기능을 제공하는 새로운 라이브러리 세트이며 JavaScript / C # / VB / C ++에서 사용할 수 있습니다. 각 언어는 썽킹 레이어를 거치지 않고 직접 이해하고 호출 할 수 있도록 만들어졌습니다.

Silverlight 및 WPF는 CLR에서 실행되는 XAML의 특징입니다. 다른 기능 중에서 Windows 런타임은 Silverlight와 매우 유사한 XAML 버전을 노출하지만 CLR을 통하지 않고 기본 방식으로 노출합니다. CLR뿐만 아니라 C ++에서도 액세스 할 수 있습니다.


2
"썽킹 계층"이 존재할 수 있습니다. 예를 들어 CLR은 실제로 RCW를 사용합니다. 그러나 지금은 구현 세부 사항입니다. 개발자 관점에서 WinRT .winmd 파일을 직접 참조하고 내부 유형과 직접 작업합니다.
Pavel Minaev

3
썽킹 계층은 RCW를 사용하지만 Windows 런타임의 RCW는 이전 P / Invoke RCW보다 가볍습니다.
ReinstateMonica Larry Osterman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.