소개
소개
브렌트 렉터
현명한 올빼미 컨설팅
2003년 10월
콘텐츠
이 책의 내용
"Longhorn" 애플리케이션 모델
신뢰할 수 있는 컴퓨팅 및 보안
리치 스토리지 및 데이터 액세스
커뮤니케이션 및 공동 작업
풍부한 프레젠테이션 및 미디어
이 책에서 찾을 수 있는 내용
여러 해 동안 소프트웨어 개발자로서 저는 수많은 플랫폼과 운영 체제에 대한 프로그램을 작성했으며, 이 모든 것이 장점과 단점을 가지고 있었습니다. 일반적으로 대부분의 플랫폼 및 운영 체제는 증분 개선으로 이전 버전과 유사했습니다.
지금까지 Microsoft® Windows® 자체는 이러한 방식으로 발전했습니다. 처음에 Windows 애플리케이션을 작성하는 것은 Microsoft Win32® API에 프로그래밍하는 것을 의미했습니다. (사실, 한 번에 Win16 API였지만 개념적으로 동일합니다.) Microsoft는 C 프로그램에서 호출할 수 있는 플랫 절차 API로 Win32 API를 설계했습니다. 한 때 이 API를 도입한 Charles Petzold의 저서 '프로그래밍 Windows'는 모든 Windows 애플리케이션 개발자에게 읽기가 필요했습니다.
Win32 API의 좋은 점은 원하는 모든 작업을 수행할 수 있다는 것입니다. (덜 좋은 점은 당신이 거의 당신이 원하는 모든 것을 해야한다는 것입니다 .) 모든 Windows 메시지에서 먼저 균열이 발생하며 적절한(또는 부적절한) 방식으로 신호를 표시하는 이벤트에 응답할 수 있습니다. 원하는 경우 보안을 허용하는 메모리(사용자 고유의 프로세스의 메모리 또는 다른 프로세스의 메모리)를 수정할 수 있습니다. 원하는 방식으로 창을 그릴 수 있습니다. 작업은 적절한 시간에 올바른 위치에서 화면에 올바른 비트를 가져오는 것입니다.
Windows 자체의 디자인은 실제로 개체 지향적입니다. 창 개체를 조작하고 그래픽 펜 등을 사용합니다. 그러나 올바른 API(사용 가능한 수천 명 중)를 적절한 순서로 호출하고 적절한 데이터 형식을 전달하여 이러한 작업을 수행합니다.이 작업은 대부분 잘못된 경우 컴파일러 도움말 없이 전달합니다.
Microsoft가 Windows를 처음 출시한 후 몇 년 동안 소프트웨어 개발자는 일반적으로 모놀리식 격리된 애플리케이션을 작성했습니다. 개발자는 애플리케이션을 작성할 구성 요소와 컴퍼지션을 지원하는 메커니즘이 없었습니다. 또한 애플리케이션은 다른 컴퓨터의 애플리케이션은 물론 동일한 시스템의 다른 애플리케이션과 통신하려고 시도하지 않았습니다.
1993년 Microsoft는 COM(구성 요소 개체 모델)을 도입했습니다. Microsoft는 다음 두 가지 문제를 해결하기 위해 COM을 설계했습니다. COM은 다른 소스 언어 컴파일러에서 생성된 구성 요소가 변경할 수 없는 인터페이스 정의를 사용하여 상호 운용할 수 있도록 이진 표준을 도입했습니다. DCOM(Distributed COM) 네트워크 프로토콜을 사용하면 이러한 구성 요소가 프로세스 및 컴퓨터 경계를 넘어 상호 작용할 수 있습니다.
Microsoft가 1993년 이후에 도입한 대부분의 Windows API는 COM 기반 API입니다. 두 가지 예는 Microsoft DirectX® 및 Shell 확장 API입니다. 현재 Windows에는 다양한 목표를 가진 다양한 팀의 여러 개발자가 설계한 10,000개 이상의 API가 있습니다. 따라서 Windows는 DLL(동적 연결 라이브러리)에서 일부 API를 플랫 C 언어 진입점으로 노출합니다. 다른 API를 복잡한 상호 작용 COM 인터페이스 집합으로 노출합니다. 다른 기술을 사용하여 액세스하는 다른 API가 있습니다.
실제로 개발자는 대부분의 경우 이러한 복잡성으로부터 운영 체제를 보호하려고 합니다. 따라서 Microsoft 내부와 외부의 여러 팀에서 애플리케이션 개발을 간소화하기 위해 다양한 프레임워크 라이브러리를 개발했습니다. 일부 인기 있는 프레임워크 라이브러리는 MFC(Microsoft Foundation Classes), MICROSOFT ActiveX 템플릿 라이브러리(ATL), Microsoft Visual Basic®의 라이브러리, BORLAND의 OWL(Object Windows Library) 및 기타 많은 라이브러리입니다.
예를 들어 MFC는 일관되고 개체 지향적인 C++ 클래스 집합으로 Win32 API의 다양한 특이성을 래핑하려고 시도합니다. 선택한 프로그래밍 언어가 C++이고 MFC 라이브러리가 원하는 작업을 직접 지원하는 경우 작업이 쉽습니다. 그러나 주류 외부에서 약간 벗어나는 것을 원할 때, 당신은 대부분 다시 자신에 있으며, 실제로 이전보다 더 나쁜 모양입니다. 이제 Win32 API를 사용하는 방법을 파악하고 기존 MFC 클래스와 상호 운용되도록 해야 하기 때문입니다.
ATL을 사용하면 매우 효율적인 COM 개체를 작성할 수 있으며, 모호하고(많은 개발자에게) 제대로 이해되지 않은 C++ 템플릿 기반 클래스를 사용하여 Windows 애플리케이션을 더 적게 작성할 수 있습니다. 아무도 이해할 수 없는 매우 효율적인 개체로 쉽게 끝날 수 있다고 말하는 것은 그리 멀지 않습니다.
Microsoft의 Visual Basic 팀은 다른 접근 방식을 취했습니다. 언어와 라이브러리를 쉽게 배우고 사용할 수 있지만 기능과 옵션을 제거하는 대신 Win32 API에 대한 액세스를 래핑했습니다. Visual Basic을 사용하면 애플리케이션 및 이러한 구성 요소를 사용하는 애플리케이션에 대한 구성 요소를 매우 간단하게 생성할 수 있습니다. 그러나 Visual Basic에서는 Win32 API에서 제공하는 모든 항목에 대한 완전한 액세스를 허용하지 않습니다. Visual Basic 개발자가 선택한 개발 환경에 의해 부과된 제한 사항 때문에 작업을 수행할 수 없는 경우가 있습니다.
1990년대 초에서 중반까지 월드 와이드 웹이 시작되었습니다. 컴퓨터가 점점 더 연결되기 시작했습니다. 처음에 웹 브라우저는 단순히 정적 HTML을 렌더링했고 웹 검색은 잡지 페이지를 보는 것과 매우 유사했습니다.
Microsoft가 1997년에 인터넷 Explorer 4를 출시하자 다른 가능성이 발생했습니다. 개발자는 스크립트와 태그가 포함된 HTML 파일을 만들 수 있습니다. HTML 개체 모델의 개체는 동작을 얻었으며 이벤트에 응답하고 사용자 지정된 동작을 제공하는 스크립트를 작성할 수 있습니다. 이제 HTML 페이지는 클라이언트의 사용자 이벤트에 반응하고 각 화면 업데이트에 대해 서버에 대한 왕복이 필요한 이전 웹 기반 애플리케이션보다 훨씬 빠르게 응답할 수 있습니다.
웹 애플리케이션의 한 가지 큰 장점은 단순히 파일 집합을 서버에 복사하여 애플리케이션을 쉽게 배포할 수 있다는 점입니다. 다음에 클라이언트가 애플리케이션을 검색할 때 최신 버전과 상호 작용했습니다.
웹 애플리케이션의 또 다른 큰 장점은 풍부한 미디어 통합에 대한 기본 제공 지원이었습니다. 여러 글꼴, 그래픽 및 멀티미디어 콘텐츠에 대한 흐름 기반 페이지 레이아웃 및 지원은 사용하는 프레임워크에 관계없이 현재 Win32 애플리케이션을 통해 제공되는 것보다 웹 애플리케이션을 통해 제공하는 것이 훨씬 쉽습니다.
그러나 이러한 애플리케이션에 대한 프로그래밍 언어 및 라이브러리 지원이 제한되어 있으므로 현재 웹 애플리케이션을 작성하는 것은 여전히 어렵습니다. 웹 애플리케이션 디버깅은 종종 악몽입니다. 여러 가지 면에서 클라이언트 사용자 환경은 웹 애플리케이션에서 사용할 수 있는 제한된 컨트롤 집합으로 인해 Win32 API를 기반으로 하는 클라이언트 애플리케이션에서 제공하는 만큼 풍부하지 않습니다.
1990년대 후반까지 Windows 개발자는 종종 전문화해야 했습니다. Win32 API 프로그래머였으며 모든 종류의 클라이언트 애플리케이션을 천천히 작성할 수 있었습니다. 또는 Visual Basic 개발자였으며 비교적 풍부한 양식 기반 UI(사용자 인터페이스) 애플리케이션을 빠르게 작성할 수 있었지만 다른 유형의 애플리케이션을 전혀 작성할 수 없었습니다. MFC 개발자는 이러한 두 가지 극단을 다소 뒤떨어졌지만 실제로는 Win32 API에 익숙한 능숙한 C++ 개발자가 되어 좋은 MFC 개발자가 되어야 했습니다. ATL 및 COM 개체 개발자는 종종 시스템의 배관공이었으며 이러한 다른 개발자가 재사용할 수 있는 구성 요소를 제공했습니다.
2000년에 Microsoft는 .NET을 도입했습니다. 정확히 .NET이 무엇인지에 대한 정의 는 사용자가 누구에게 물어보느냐에 따라 다릅니다. 제 생각에 .NET은 XML 및 웹 서비스와 같은 최신 기술을 사용하는 정확하고 안전한 Windows 애플리케이션을 이전보다 더 빠르게 생산하기 위한 최신 소프트웨어 개발 플랫폼이지만 여전히 유산 코드에 대한 액세스를 허용합니다.
일반적으로 .NET 및 관리 코드는 소프트웨어 개발자에게 다음과 같은 다양한 이점을 제공합니다.
- 개체 지향 언어에 구애받지 않은 형식 안전 개체 모델입니다.
- 다양한 버전의 구성 요소 간의 충돌을 줄입니다.
- 일반적인 프로그래밍 실수로 인한 버그 및 보안 허점의 수가 감소했습니다. 예를 들어 버퍼 오버런이 더 이상 없고 메모리 관리 오류가 더 이상 없습니다.
- 모든 개발자가 사용할 수 있는 단일 프레임워크 및 라이브러리 집합입니다. .NET Framework 클래스 라이브러리는 가장 일반적으로 사용되는 Win32 API와 통합 패키지의 많은 SDK에서 제공하는 수많은 추가 API를 캡슐화합니다.
- 이전에 사용할 수 있었던 것보다 더 높은 추상화입니다.
어떤 면에서 .NET은 Win32 API의 여러 측면을 캡슐화하는 새로운 개체 지향 언어 중립적 프레임워크일 뿐입니다. 개인적으로는 .NET을 Win32 API의 최신 대체품으로 생각하는 것을 선호합니다. 아직 불완전하지만 시간이 지남에 따라 더 완전해지고 있습니다.
예를 들어 .NET 버전 1.0은 개체 지향 양식 기반 클라이언트 애플리케이션 개발 클래스를 제공합니다. 이를 단순히 기본 Win32 창 API에 대한 래퍼라고 생각할 수 있습니다. 그러나 .NET은 웹 애플리케이션 개발 및 HTML 및 동작 생성을 캡슐화하는 ASP.NET 클래스도 제공합니다. 이러한 클래스는 실제로 Windows API를 확장하며 Win32 API에서 실제로는 래퍼가 아닙니다. . 일반적으로 웹 서비스 및 XML에 대한 NET의 풍부한 지원은 기존 Win32 기능에 대한 간단한 래퍼가 아닌 .NET과 함께 제공되는 새로운 기능의 두 가지 예입니다.
이 책의 내용
이 책은 개발자를 위한 Microsoft "Longhorn" 기능에 중점을 둡니다. 개발자의 관점에서 "Longhorn"은 다음과 같은 5가지 영역에서 광범위하게 분류할 수 있는 새로운 기능을 제공합니다.
"Longhorn" 애플리케이션 모델
"Longhorn"은 새롭고 더 강력한 방법으로 애플리케이션을 정의합니다.
- "Longhorn" API는 대부분의 프로그래밍 하우스키핑을 처리하고 개발자의 워크로드를 줄이는 관리되는 클래스입니다. .NET CLR(공용 언어 런타임)을 지원하는 모든 타사 개발자 컴파일러 및 도구는 새 "Longhorn" API를 자동으로 지원합니다.
- "Longhorn" 애플리케이션 모델은 기존의 양식 기반 및 새 페이지 기반 탐색 애플리케이션을 모두 지원합니다. 애플리케이션 페이지 기반 탐색 지원은 운영 체제에서 제공합니다.
- 관리되는 API와 디지털 ID의 조합에 따른 새로운 "Longhorn" 보안 및 개인 정보 보호 모델은 개발 프로세스 시작부터 애플리케이션 보안을 제공합니다. "Longhorn" 애플리케이션 및 구성 요소는 관리 코드 사용으로 인해 신뢰할 수 있습니다.
- "Longhorn" API는 다양한 현대 기술의 최고의 개발 개념을 나타냅니다. 여러 면에서 개발자는 10여 년 전에 내린 디자인 결정에 더 이상 제약을 받지 않습니다.
- 애플리케이션을 쉽게 개발할 수 있는 자동 애플리케이션 상태 관리 및 보존.
- ClickOnce 배포 기술은 프로그램 파일의 설치, 버전 관리, 병렬 설치 및 Drizzle 다운로드와 같은 정교한 배포 기능을 지원합니다.
- 유도 UI는 작업을 통해 사용자를 안내합니다.
- 접근성 및 자동화 기능은 플랫폼에 기본 제공됩니다. 애플리케이션은 자동으로 이러한 지원을 얻습니다.
신뢰할 수 있는 컴퓨팅 및 보안
"Longhorn"은 CAS(공용 언어 런타임 코드 액세스 보안) 모델을 기반으로 하지만 상당한 확장을 통해 애플리케이션의 보안을 기반으로 합니다.
- "Longhorn"은 일부 애플리케이션이 완전히 신뢰할 수 있고 일부는 부분 신뢰만 가지고 있음을 인식합니다. "Longhorn" 보안 모델에 완전히 참여하는 애플리케이션은 "Longhorn" 기능에 대한 모든 권한을 갖습니다. 모델에 부분적으로만 참여하는 애플리케이션에는 제한 사항이 있지만 몇 가지 이점이 있습니다.
- "Longhorn"은 "잘못된" 애플리케이션 동작으로부터 사용자를 보호하는 보안 실행 환경(SEE)이라는 초보안 관리 코드 런타임 환경을 제공합니다.
- 신뢰 관리자는 사용자가 애플리케이션에 부여할 수 있는 제안된 신뢰 수준을 결정하는 "Longhorn" 애플리케이션에 대한 점수 매기기 시스템을 제공합니다.
- "Longhorn"은 사용자가 핫 픽스를 관리하고 Windows 업데이트에 액세스할 수 있는 보안 보안 센터를 제공합니다. 또한 Security Advisor는 사용자에게 보안 위험 및 위반을 알릴 수 있습니다.
- 디지털 권한 관리는 관리 코드의 일부로, 지적 재산권을 강력하게 보호합니다. 이를 통해 "Longhorn" 환경에서 이전에 취약한 지적 재산을 안전하게 보관하고 전송할 수 있습니다.
- "Longhorn"은 디지털 서명을 사용하여 사용자와 컴퓨터를 고유하게 식별합니다. 인증을 위해 서명 기관과 결합하면 "Longhorn"은 컴퓨팅 시나리오에서 개별 사용자를 안전하고 안정적으로 식별할 수 있습니다.
리치 스토리지 및 데이터 액세스
"Longhorn"은 새 파일 시스템을 통해 크게 향상된 애플리케이션 데이터 스토리지 및 액세스를 제공합니다.
- 새 ADO.NET 향상된 데이터 액세스를 제공합니다.
- 연락처, 조직, 주소 등과 같은 일상적인 정보에 대한 일반적인 스키마는 애플리케이션, 운영 체제 및 셸에서 공유 정보 액세스를 허용합니다. 실제로 새 셸 사용자 인터페이스는 새 스토리지 시스템의 가장 무거운 사용자 중 하나입니다.
- 애플리케이션은 파일 시스템의 개체에 추가 메타데이터를 연결할 수 있으므로 기존 파일 시스템에서 가능한 것보다 더 빠르게 파일 개체를 검색하고 검색할 수 있습니다.
- "Longhorn" 환경의 개체 변경 내용은 동적 데이터 바인딩을 사용하여 해당 개체의 다른 인스턴스로 자동으로 전파됩니다.
커뮤니케이션 및 공동 작업
"Longhorn" 애플리케이션에는 이제 다양한 통신 및 협업 기능이 있습니다.
- 세션 및 채널과 같은 기능은 참가자에게 풍부한 공동 작업 서비스를 제공합니다.
- 통신 및 공동 작업 기능은 방화벽 및 NAT(네트워크 주소 변환)를 통해 안전하게 작동하여 회사 경계를 통과할 수 있습니다.
- 웹 서비스를 기반으로 하는 표준화된 통신을 통해 레거시 및 새 애플리케이션이 협업에 참여할 수 있습니다.
- 서버 기반/피어 기반 통신 기능은 중앙 집중식 인프라를 통해 또는 사용자 클라이언트에 직접 작동할 수 있습니다.
- 가상 프레즌스 지원을 통해 사용자는 인스턴트 메시징과 같은 기능(일반 알림, 초대 등)을 통해 다른 사용자와 공동 작업할 수 있습니다.
- 통합 보안은 이러한 기능의 필수적인 부분입니다.
- 공동 작업 ** 동사(기본 채팅 클라이언트 사용 등)와 같은 셸 확장성 지원을 식별하여 "Longhorn" 실시간 통신에서 친숙한 도구를 사용할 수 있습니다.
- 새 사람 Picker 컨트롤과 같은 일반적인 컨트롤은 통신 애플리케이션에 대한 높은 수준의 애플리케이션 지원을 제공합니다.
풍부한 프레젠테이션 및 미디어
개발자는 "Longhorn"에서 사용할 수 있는 프레젠테이션 및 미디어 서비스를 사용하여 풍부한 사용자 인터페이스를 제공하는 애플리케이션을 보다 쉽게 생성할 수 있습니다.
- "Longhorn"은 개발자에게 하드웨어 가속을 활용하는 애니메이션, 효과 및 시각적으로 흥미로운 이미지를 제공하는 풍부한 그래픽 클래스를 제공합니다.
- 강력한 선언적 및 동적 벡터 그래픽을 사용하면 그래픽이 설명 언어에서 생성되기 때문에 리소스를 절약하면서 고해상도 출력 디바이스에 대한 유연한 프레젠테이션 및 크기 조정이 가능합니다.
- 쉽게 적용할 수 있는 애니메이션은 UI의 유용성과 연속성을 향상시킵니다.
- 그래픽 지원은 하드웨어 가속 DirectX/3D 비디오 카드를 사용하여 보다 몰입적이고 유동적인 환경을 만듭니다.
- 애플리케이션은 이미지, 비디오, 오디오, 벡터 그래픽, 컨트롤, 텍스트 등 모든 형태의 사용자 인터페이스를 원활하게 통합할 수 있습니다.
- 새 레이아웃 모델을 사용하면 페이지 매김, 위치 등을 화면 크기로 자동으로 조정하는 프레임워크로 인해 서식 있는 텍스트 및 미디어 표시가 가능합니다.
- 하위 픽셀 렌더링(ClearType)의 포함과 같은 새로운 텍스트 서비스를 사용하면 가능한 화면 해상도와 관계없이 3D 가속기를 사용하여 모든 PC에서 시각적으로 매력적인 GUI를 사용할 수 있습니다.
- 서로 다른 데이터 조각을 컨테이너에 병합할 수 있으며, UI를 중심으로 이동할 수 있습니다.
- 형식, 값 또는 기타 규칙을 기반으로 하는 데이터의 조건부 변환을 통해 개발자 도구는 보다 허구적인 UI를 만들 수 있습니다.
- 광범위한 멀티미디어 플랫폼을 사용하면 오디오 및 비디오의 결함 없는 재생이 가능합니다. PC와 소비자 전자 장치 간에 분산된 A/V 환경; 최고 품질의 오디오 및 비디오 코덱; 실시간 고화질 콘텐츠 캡처 및 편집을 위한 고성능; 풍부한 CD, DVD 및 텔레비전 메타데이터 서비스.
이 책에서 찾을 수 있는 내용
이러한 각 topics 쉽게 스스로 책을 채울 수 있습니다. 따라서 "Longhorn"의 다양한 API를 모두 설명하지는 않을 것입니다. 나는 또한 각 기술에 대한 자세한 설명을 자세히 설명하지 않을 것입니다. API 또는 참조 책이 아닙니다 . 나는 당신이 서점에서 사용할 수있는 문서의 많은 약간 편집 및 역류 사본을 찾을 수있을 때까지 오래되지 않을 것이라고 확신합니다.
내가 할 일은 "롱혼"을 위해 개발을 시작하는 방법을 보여주는 것입니다. 최소한 챕터 1과 2는 "Longhorn" 플랫폼용 애플리케이션을 개발하는 데 알아야 하는 절대 기본 사항을 다루기 때문에 실제로 읽어야 합니다.
1장에서는 새 애플리케이션 모델에 대해 설명합니다. Go를 전달하지 마세요. $200를 모으지 마세요. 당신은 정말 장을 읽어야 1 또는 당신은 메일에 감옥으로 이동 카드 얻을 수 있습니다. 또한 1장에서 새로운 태그/프로그래밍 언어를 소개합니다. VB.NET 개발자, C# 개발자 또는 신화적인 COBOL.NET 개발자 중 한 명이든 이 새로운 태그/프로그래밍 언어를 배워야 합니다. 1장: "Longhorn" 애플리케이션 모델을 읽어보세요. 농담이 아니에요. 사실, 지금 그것을 가서 다시 와서. 기다릴게요.
이제 1장을 읽었으며 고유한 애플리케이션을 빌드하게 되어 기쁩니다. 이제 2장을 읽어야 합니다. 이 문서에서는 "Longhorn" 애플리케이션을 컴파일, 배포 및 실행하는 방법을 보여 줍니다. 따라서 2장도 중요하지만, 서두르지 않아도 될 것입니다. 그것은 매우 참을성있는 장이며,이 소개를 완료 할 때까지 기다릴 것입니다.
나머지 챕터에서는 이 소개에서 언급한 다양한 기술을 소개합니다. 3장은 새로운 태그 언어를 사용하여 사용자 인터페이스를 만드는 환상적인 소개이며 그 힘을 제공합니다. 4장에서는 새 파일 시스템 API를 도입했으며 Win32 파일 시스템 API를 중단하게 될 수 있습니다.
5장에서는 데이터 바인딩을 사용하여 실제로 모든 .NET 개체에서 사용자 인터페이스로 데이터를 이동하고 절차 코드를 작성하지 않고 다시 이동하는 방법을 보여 줬습니다. 6장에서 강력하고 안전하고 신뢰할 수 있는 통신 애플리케이션을 만드는 방법을 보여 줍니다. 마지막으로, 마지막 챕터에서는 최신 연결 모바일 애플리케이션을 만들기 위한 몇 가지 지침을 설명합니다.
이 긴 소개가 끝날 때까지 놀고 주셔서 감사합니다. 이제 2장을 읽을 차례입니다. (이전에 1장을 읽었습니다. 그렇지 않습니까?) "롱혼"으로 즐거운 시간. 나는 확실히 있다!
1장: "Longhorn" 애플리케이션 모델로 계속 진행
브렌트 렉터
브렌트 렉터는 와이즈 올빼미 컨설팅(www.wiseowl.com)의 사장 겸 설립자이며 소프트웨어 개발 분야에서 3년 이상의 경험을 보유하고 있습니다. Brent는 운영 체제뿐만 아니라 새로운 컴퓨터 프로그래밍 언어 및 컴파일러를 설계하고 구현했습니다. Brent는 1985년에 Windows 1x 베타를 사용하여 Windows 애플리케이션 개발을 시작했으며 그 이후로 Windows 개발에 참여해 왔습니다. 그는 ATL Internals 및 Win32 프로그래밍을 비롯한 수많은 Windows 프로그래밍 책의 저자이자 공동 저자입니다. 또한 Brent는 .NET 애플리케이션용 프리미어 코드 난독 분석기인 .NET에 대한 비속어의 작성자이기도 합니다.
© 2003 Microsoft Corporation. All rights reserved.
IntelliSense, Microsoft, MSDN, MS-DOS, Visual Basic .NET 및 Visual Studio .NET은 미국 및/또는 기타 국가에서 Microsoft Corporation의 등록 상표 또는 상표입니다. 여기에 언급된 다른 제품 및 회사 이름은 해당 소유자의 상표일 수 있습니다.