090916 X D E V今だから理解する[

38
今今今今今今今今 .NET Framework Java 今今今今今今今今今今今今 マママママママママママ ママママママ & ママママママママ ママママ ママママママママ マママママママママママママママママ ママ ママ

Transcript of 090916 X D E V今だから理解する[

Page 1: 090916 X D E V今だから理解する[

今だから理解する「 .NET Framework 」

Java ユーザーにも聞いてほしい

マイクロソフト株式会社デベロッパー & プラットフォーム 統括本部開発ツール製品部エグゼクティブプロダクトマネージャ鈴木 祐巳

Page 2: 090916 X D E V今だから理解する[

アジェンダ はじめに .NET Framework の概要 コンパイル 配置 実行 セキュリティ まとめ

Page 3: 090916 X D E V今だから理解する[

はじめに

Page 4: 090916 X D E V今だから理解する[

本セッションの目的 .NET Framework 初めての方

.NET Framework の実行の仕組みを理解する。

.NET 開発者の方CLR に対する理解を深めるきっかけとし、

トラブルを未然に防ぐための一助とする。

Page 5: 090916 X D E V今だから理解する[

.NET Framework の概要

Page 6: 090916 X D E V今だから理解する[

.NET Framework とは

=

Page 7: 090916 X D E V今だから理解する[

.NET Framework とは

SOA をはじめとする Connected System の技術基盤、ソリューション、サポートの総称

“Connected System” を実現するためのフレームワーク実装

CLR + Library 開発生産性、安全性、

信頼性を実現する開発プラットフォーム

Page 8: 090916 X D E V今だから理解する[

Common Language Runtime(CLR)

.NET Framework の構造Solution Framework

Base Class Library(BCL)

ADO.NET ASP.NETWindowsフォーム

WCF WPF WFCardSpac

e

ASP.NETAJAX

LINQ

Page 9: 090916 X D E V今だから理解する[

ライブラリ

CLR

1.0 1.1 2.0 3.0 3.5

.NET Framework バージョン遷移

1.0 1.1 2.0 2.0 2.0V-UP Keep Keep

3.0 3.0Keep

V-UP

Add

3.5Add

包含

共存

1.0 1.1 2.0 2.0 2.0V-UP Keep KeepV-UP

Page 10: 090916 X D E V今だから理解する[

本題の入り口

Page 11: 090916 X D E V今だから理解する[

実行までの超概要 プログラム: 3 つの状態 開発環境と実行環境 2 つのコンパイラ

CLRVisual Studio 、 SDK

ソースコード アセンブリ ネイティブ

言語別コンパイラ JIT コンパイラ

Page 12: 090916 X D E V今だから理解する[

コンパイル

Page 13: 090916 X D E V今だから理解する[

.NET 言語 ( プログラミング 言語 )

• Visual Basic• Visual C#

標準言語

• JScript• Iron Python• Iron Ruby• F#

スクリプト言語

• COBOL など

3rd パーティ製

Page 14: 090916 X D E V今だから理解する[

アセンブリ

中間言語MSIL

言語別コンパイラ 言語別のコンパイラ と ひとつの中間言語 CLR が解釈可能な中間言語にコンパイル

Visual Basic

Visual C# C# コンパイラ

VB コンパイラ

Page 15: 090916 X D E V今だから理解する[

アセンブリ アセンブリとは

アプリケーションのビルディング ブロック基本単位○ 配置○ バージョン管理○ 再利用○ アクティブ化のスコープの指定○ セキュリティ アクセス許可

つまり、 DLL や EXE

Page 16: 090916 X D E V今だから理解する[

アセンブリの内容 MANIFEST

自己記述型のアセンブリ情報○ アセンブリの ID 、厳密名情報、バージョン情報、カ

ルチャ○ 含まれる型やリソースの情報○ 参照しているアセンブリの情報○ 実行に必要な許可セット情報など

IL JIT コンパイラへの入力となる中間言語

メタデータ 型とメソッドに関する情報

リソース 文字列や画像、永続化されたデータなど

アセンブリ

MANIFESTメタデータ

IL

メタデータ

IL リソース

メタデータ

IL

Page 17: 090916 X D E V今だから理解する[

アセンブリ名• テキストベースの単純な名前• アセンブリ内の ( コアの ) ファイルの名前と連動

• Prog01.dll のアセンブリ名は、 Prog01

簡易名

• 開発者 ( 発行者 ) の公開キーを割り付けた名前• 開発者が異なれば、厳密名は異なる• バージョン、カルチャ

• 共有 DLL ( 共有アセンブリ ) 、バージョン管理などで利用

厳密名

テキスト

テキスト バージョン カルチャ 公開キー+ + +

簡易名

厳密名

秘密キー

Page 18: 090916 X D E V今だから理解する[

配置

Page 19: 090916 X D E V今だから理解する[

アセンブリの配置場所 任意のディレクトリ

単一のアプリケーションからしか使用しない場合 構成ファイルの <codeBase> を使用して検索場所を指

定○ 厳密名を持つ場合

コンピュータ、イントラネット、インターネットの任意の場所○ 厳密名を持たない場合

アプリケーションのディレクトリ、もしくはサブディレクトリ

GAC (Global Assembly Cache) 複数のアプリケーションで共有する場合 厳密名を持つ場合のみ登録可能 gacutil.exe を使用して アセンブリのインストールや削

除を行う

Page 20: 090916 X D E V今だから理解する[

.NET での配置方法 配置の特徴

レジストリへの登録は不要アセンブリ単位で管理される高度なバージョン管理が可能

配置方法XCopy による配置 (XCopy デプロイメント )○ 単純なファイルのコピー

Windows インストーラを利用した配置○ .msi ファイルを利用したセットアップ プログラム○ Visual Studio を使って作成

ClickOnce○ HTTP を利用して Web サーバーからダウンロード

Page 21: 090916 X D E V今だから理解する[

アセンブリのバージョン管理

厳密名バージョンもアセンブリ区別の対象となる

DLL HELL からの解放複数のバージョンの DLL を管理可能前提とするバージョンの DLL を勝手に更新

しない (GAC の場合 )

サイド バイ サイド 実行適切なバージョンの DLL を検索し、ロード

Page 22: 090916 X D E V今だから理解する[

アセンブリのサイド バイ サイド実行

異なるバージョンの共有 DLL が共存

バージョン管理の対象外

共有アセンブリとしての使用

ローカルな使用

\Windows\assembly グローバル アセンブリ キャッシュ (GAC)

プログラム A

New Class1()

プログラム B

New Class1()

プログラム C

New Class1()

プログラム D

New Class1()

MANIFESTVer.1.0.0.0

厳密名

Class1

Example.dll

MANIFESTVer.2.0.0.0

厳密名

Class1

Example.dll

MANIFESTVer.2.0.1.0

厳密名

Class1

Example.dll

MANIFEST

簡易名

Class1

Example.dll

Page 23: 090916 X D E V今だから理解する[

実行

Page 24: 090916 X D E V今だから理解する[

アセンブリの実行

アセンブリローダ

マネージ EXE .NET 実行ファイル

JITコンパイラ

MSCorEE.dll

ヘッダー解析

起動

ロード・初期化

自身のロード

必要な型のロード

コンパイル・コードの検証

MSCorWks.dll

実行

Page 25: 090916 X D E V今だから理解する[

Web サーバー (IIS)

ASP.NET ランタイムの実行プロセス

ASPXファイル

リクエスト

ASPX

エンジン

解析

生成されたページクラス

生成

レスポンス

リクエストインスタン

レスポンス

コードビハインド

クラス

ページ

クラス プロセスのインスタンス化

コンパイル

Web

ラウ

Page 26: 090916 X D E V今だから理解する[

ランタイムバージョンの選定

アセンブリのファイル ヘッダで実行する CPU アーキテクチャを選定

構成ファイルなどの情報で実行する CLR のバージョンを選定 ( サイド バイ サイド 実行 )

32bit のMSCorEE.dll

64bit のMSCorEE.dll

アセンブリのヘッダ

構成ファイル

CLR 1.0 のMSCorWks.dll

CLR 1.1 のMSCorWks.dll

CLR 2.0 のMSCorWks.dll

Page 27: 090916 X D E V今だから理解する[

アプリケーション ドメイン 論理的なプロセス空間

SystemDomain○ mscoree.dll○ mscorwks.dll

SharedDomain○ mscorelib.dll

AppDomain○ アプリケーション

プロセス

AppDomain 1(Default AppDomain)

System.dll

App1.exe

AppDomain 2

System.dll

App2.exe

SystemDomain

SharedDomain

mscorlib.dll

Page 28: 090916 X D E V今だから理解する[

JIT コンパイラ JIT (Just In Time) コンパイラ

実行時に未コンパイルの MSIL を ネイティブ コードにコンパイル

コンパイル後のネイティブ コードはメモリに格納

NGen.exe による事前コンパイルも可能

Page 29: 090916 X D E V今だから理解する[

セキュリティ

Page 30: 090916 X D E V今だから理解する[

セキュリティ コード アクセス セキュリティ

ロールベース セキュリティ

Page 31: 090916 X D E V今だから理解する[

コード アクセス セキュリティとは コード アクセス セキュリティ

プログラムの実行時、アセンブリに対して、リソース アクセスや特定操作に関して行われるアクセス制御○ エビデンス ベースのセキュリティ

.NET Framework 実行環境が標準で備えている

証拠 ( エビデンス ) の提示

アクセス許可の付与

アセンブリ CLR

Page 32: 090916 X D E V今だから理解する[

セキュリティポリシー コードグループとアクセス許可セットとの対応付け

Group All Code

ゾーン – マイコンピュータ

ゾーン – イントラネット

URL – http://srv/*

特定の条件ごとのグループ アクセス許可 (Permission) のグループ

アセンブリ

ロード 条件に照らし合わせ、コードグループに属する

アクセス許可が付与される

メンテナンス

caspol ( コマンドライン )Microsoft . NET Framework 2.0 構成(MMC)

LocalIntranet ファイル ダイアログ

MySet ファイル IO

FullTrust すべてのアクセス許可Group

Group

Group

Page 33: 090916 X D E V今だから理解する[

ロール ベース セキュリティ 役割ごとにユーザーをグループ化した「ロー

ル」単位で行うセキュリティ制御おもにビジネスロジック制御に利用

ロールは Windows OS のアカウントに非依存ロールは Windows のグループア カウントにマップ

可能 実行スレッドに対して、 Principal オブジェク

トが関連付いている実行者を表す Principal オブジェクトを元に制御する

Page 34: 090916 X D E V今だから理解する[

まとめ

Page 35: 090916 X D E V今だから理解する[

CLR のメリット ( まとめ )

異なるプログラミング言語での簡単な連携異なる言語で記述された DLL を他の言語から利用できる複数言語間のクラス継承、例外処理

高度なバージョン管理DLL HELL からの解放サイド バイ サイド実行

ランタイムによるセキュリティ向上コード アクセス セキュリティロール ベース セキュリティ

Page 36: 090916 X D E V今だから理解する[

多様なアプリケーション開発プラットフォームのパワーを最大限活用した

アプリケーションの実現

Web アプリケーション

Windows アプリケーション

モバイル アプリケーション

バックエンド システム

Office アプリケーション

クラウド

Page 37: 090916 X D E V今だから理解する[

参考書籍 .NET Framework 開発ガイドブック

プログラミング .NET Framework 第2版Jeffrey Richter 著吉松 史彰 監訳日経 BP ソフトプレス

Page 38: 090916 X D E V今だから理解する[

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista, Visual Studio and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.