Metro 스타일 앱 을 만드는 데 사용되는 새로운 Windows 8 런타임을 사용하려고 합니다. XAML 과 함께 사용할 수 있으며 .NET을 기반으로하므로 C # 및 VB.NET을 사용하여 앱을 작성할 수 있지만 HTML, CSS, DOM 및 JavaScript와 관련이있는 것으로 보입니다.
누군가가 .NET UI 프로그래머가 이해할 수있는 용어로 몇 단락으로 설명 할 수 있습니까? (나는 그것을 이해하는 데 필요한“열쇠”가 빠져있다.)
우리는 모두 WPF, Silverlight , Windows Forms 등이 최소한 Intel 시스템에서 Windows 8 (및 Windows 10)에서 계속 작동 한다는 것을 알고 있으므로 말하지 마십시오 …
답변
가장 낮은 수준에서 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.UI
API 방식의 Silverlight와 매우 유사합니다. 여전히 UI를 정의 할 XAML이 있으며 데이터 바인딩, 리소스, 스타일, 템플릿 등 Silverlight와 동일한 기본 개념을 처리합니다. 대부분의 경우 using
새로운 네임 스페이스를 통해 Silverlight 앱을 이식 할 수 있습니다. API가 조정 된 코드에서 몇 군데를 조정했습니다.
WinRT 자체는 HTML 및 CSS와 관련이 없으며 .NET에서 수행되는 방식과 유사하게 JavaScript 와도 관련이 있다는 의미에서만 JavaScript와 관련이 있습니다. .NET Metro 앱에서 WinRT UI 라이브러리를 사용할 때 HTML / CSS / JS를 처리 할 필요가 없습니다 (정말 원한다면 WebView
컨트롤을 호스팅 할 수 있습니다 ). 모든 .NET 및 Silverlight 기술은이 프로그래밍 모델과 관련이 있습니다.
답변
로부터 빌드 기조 연설 :
HTML / CSS / JavaScript 앱과 C # / XAML 앱 모두에 공통 API를 제공하고 있습니다. C # 및 XAML이 사용되지만 WPF 또는 Silverlight가 아닙니다.
답변
핵심 아이디어는 이제 데스크탑과 메트로의 두 가지 개발 트랙이 있다는 것입니다.
- 데스크톱은 이전 앱이있는 곳입니다.
- 새로운 클래스의 응용 프로그램 인 Metro 응용 프로그램은 VB.NET, C # 또는 C ++ 등 다양한 방법으로 구축 할 수 있습니다. 이 세 가지 언어 옵션은 XAML을 사용하여 UI를 빌드 할 수 있습니다. 대안은 UI 및 응용 프로그램 코드 모두를 개발하기 위해 JavaScript / HTML5 / CSS를 사용하는 것입니다.
몇 가지 중요한 사항 :
- Windows 8은 일종의 고급 휴대 전화 OS와 같은 느낌입니다.
- Metro에서는 휴대폰에없는 것처럼 최상위 창이 겹치지 않습니다. MDI 스타일 응용 프로그램을 원하면 데스크톱에 그대로 있어야합니다.
- Metro 스타일 앱은 보이지 않으면 자동으로 일시 중지됩니다. 이것은 배터리 수명을 연장하기 위해 수행되었습니다. 즉, 사용자가 상호 작용하지 않는 동안 백그라운드 처리를 수행하여 Metro로 포팅되는 기존의 많은 데스크톱 앱에는 적합하지 않습니다.
- ARM 버전의 Windows 8은 데스크톱 응용 프로그램을 지원하지 않습니다. 따라서 앱을 작성하고 모든 버전의 Windows에서 작동하게하려면 Metro 앱이어야합니다.
답변
정확한 위치를 이해하는 데 도움이되는 수정 된 아키텍처 버전이 있습니다. Telerik 닌자 중 한 명이 CLR 팀과 대화를 나누고 그림을 수정했습니다.
CLR이 어디에 있는지 볼 수 있습니다. .NET 프레임 워크에는 이제 두 개의 프로파일이 있습니다.
1- .NET Metro 프로필 (Metro 응용 프로그램을 처리하는 CLR)
2- .NET 클라이언트 프로파일 (C # 및 VB.NET 애플리케이션의 CLR 런타임)
이것이 당신에게 더 명확한 그림을주기를 바랍니다. 나쁜 그림은 천 번의 토론에 가치가 있습니다. 의 전체 기사를 읽으십시오 . .
답변
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 ++에서도 액세스 할 수 있습니다.