デブサミ2008 .netの仕組み

36
新新 新新 マママママママママママ ママママママ ママママママママママママ ママママママママママママ マママ マママママ ママママママ 14-B-4 新新新新新新新.NET Framework 新新新新新新

Upload: takeshi-shinmura

Post on 12-Jun-2015

802 views

Category:

Technology


3 download

DESCRIPTION

4年前の資料なり

TRANSCRIPT

Page 1: デブサミ2008 .NETの仕組み

新村 剛史マイクロソフト株式会社デベロッパー&プラットフォーム統括本部デベロッパービジネス本部シニア プロダクト マネージャー

14-B-4

今こそ知りたい!.NET Framework のメカニ

ズム

Page 2: デブサミ2008 .NETの仕組み

アジェンダ はじめに .NET Framework の概要 ソースコードからのコンパイル アセンブリ アセンブリから実行まで 配置 セキュリティ まとめ

Page 3: デブサミ2008 .NETの仕組み

はじめに

Page 4: デブサミ2008 .NETの仕組み

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

.NET Framework の実行の仕組みを理解していただく。

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

いただくき、トラブルを未然に防ぐための一助とする。

Page 5: デブサミ2008 .NETの仕組み

.NET Framework の概要

Page 6: デブサミ2008 .NETの仕組み

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

包含

共存

Page 7: デブサミ2008 .NETの仕組み

.NET Framework の構成

Base Class Library (BCL)

ASP.NETADO.NETWindowsフォーム

WCF WF WPFCardSpac

e

WCF 追加 WF 追加 WPF 追加 BCL 追加

ASP.NET 追加(ASP.NET AJAX)

LINQ

Common Language Runtime(CLR)

3.5

3.0

2.0

コンパイラ

3.5コンパイラ

2.0コンパイラ

Page 8: デブサミ2008 .NETの仕組み

共通言語ランタイム (CLR) のメリット

CLR を使用することで受ける恩恵 異なるプログラミング言語での簡単な連携

異なる言語で記述された DLL を他の言語から利用できる 複数言語間のクラス継承、例外処理

高度なバージョン管理 参照する側が参照先のバージョンを知っている サイド バイ サイド実行

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

Page 9: デブサミ2008 .NETの仕組み

ソースコードからのコンパイル

Page 10: デブサミ2008 .NETの仕組み

.NET アプリケーションの動作

Common Language Runtime

ソースコードアセンブリEXE/DLL

( 中間コード + メタデータ )

クラス ローダ

JIT コンパイラ

ネイティブ コード実行

クラスライブラリPreJIT

コンパイラ

セキュリティチェック

セキュリティ

Page 11: デブサミ2008 .NETの仕組み

アセンブリ

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

Visual Basic

Visual C# C# コンパイラ

VB コンパイラ中間言語

MSIL

Page 12: デブサミ2008 .NETの仕組み

アセンブリ

Page 13: デブサミ2008 .NETの仕組み

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

配置とバージョン管理の単位 プライベートアセンブリと共有アセンブリ

アセンブリに含まれるもの MANIFEST

自己記述型のアセンブリ情報 アセンブリの ID 、厳密名情報、バージョン情報、カルチャ 含まれる型やリソースの情報 参照しているアセンブリの情報 実行に必要な許可セット情報など

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

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

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

アセンブリ

MANIFESTメタデータ

IL

メタデータ

IL リソース

メタデータ

IL

Page 14: デブサミ2008 .NETの仕組み

アセンブリ名 簡易名

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

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

厳密名 開発者 ( 発行者 ) の公開キーを割り付けた名前

開発者が異なれば、厳密名は異なる 共有 DLL ( 共有アセンブリ ) 、バージョン管理などで利用

テキスト

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

簡易名

厳密名

秘密キー

Page 15: デブサミ2008 .NETの仕組み

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

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

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

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

Page 16: デブサミ2008 .NETの仕組み

アセンブリから実行まで

Page 17: デブサミ2008 .NETの仕組み

アセンブリの実行

アセンブリローダ

マネージEXE

JITコンパイラ

MSCorEE.dll

Windows

ヘッダー解析

起動

ロード・初期化

自身のロード

必要な型のロード

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

MSCorWks.dll

実行

Page 18: デブサミ2008 .NETの仕組み

ランタイムバージョンの選定 アセンブリのファイル ヘッダで実行する CPU アーキ

テクチャを選定 構成ファイルなどの情報で実行する CLR のバージョ

ンを選定 ( サイド バイ サイド 実行 )

32bit のMSCorEE.dll

64bit のMSCorEE.dll

アセンブリのヘッダ

構成ファイルetc

CLR 1.0 のMSCorWks.dll

CLR 1.1 のMSCorWks.dll

CLR 2.0 のMSCorWks.dll

Page 19: デブサミ2008 .NETの仕組み

アセンブリ ローダ タイプ チェック

マニフェストの確認 アセンブリの内容の確認

署名の確認 厳密名かつ GAC 以外からロードした場合 GAC に登録されている場合は GAC 登録時にチェック

バージョン選定 同一型名のアセンブリから適切なバージョンを選択 ( 厳密名の

場合 )

パーミッションの設定 エビデンスの取得 ポリシーの取得とパーミッションの設定

Page 20: デブサミ2008 .NETの仕組み

アセンブリの検索GAC (Global Assembly Cache)

• 厳密名を持つアセンブリのみ

codeBase 要素

• アプリケーション構成ファイルに記載される

Probing

• アセンブリ名を基にした検索  [アセンブリ名] + .dll or .exe• 以下のディレクトリを対象に検索

• アプリケーション ベース ディレクトリ• プライベート Binpath

見つからなければFileNotFound

Exception

Page 21: デブサミ2008 .NETの仕組み

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

実行時に未コンパイルの MSIL を Native コードにコンパイル

コンパイル後の Native コードはメモリに格納

一度コンパイルされた型は再度コンパイルされない

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

Page 22: デブサミ2008 .NETの仕組み

配置

Page 23: デブサミ2008 .NETの仕組み

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

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

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

厳密名を持たない場合 アプリケーションのディレクトリ、もしくはサブディレクトリ

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

Page 24: デブサミ2008 .NETの仕組み

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

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

配置方法 XCopy による配置 (XCopy デプロイメント )

単純なファイルのコピー Windows インストーラを利用した配置

.msi ファイルを利用したセットアップ プログラム ClickOnce

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

Page 25: デブサミ2008 .NETの仕組み

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

異なるバージョンの共有 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 26: デブサミ2008 .NETの仕組み

セキュリティ

Page 27: デブサミ2008 .NETの仕組み

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

エビデンス URL 、 Site 、 Zone 、 ApplicationDirectory 、 Publisher 、 Stro

ngName 、 Hash コードグループ

エビデンスの組み合わせ アクセス許可セット

完全信頼、部分信頼 ポリシー

エンタープライズ、マシン、ユーザー、 AppDomain

ロールベース セキュリティ ロールと Principal オブジェクト

Page 28: デブサミ2008 .NETの仕組み

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

プログラムの実行時、アセンブリに対して、リソース アクセスや特定操作に関して行われるアクセス制御

エビデンス ベースのセキュリティ .NET Framework 実行環境が標準で備えている

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

アクセス許可の付与

アセンブリ CLR

Page 29: デブサミ2008 .NETの仕組み

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

Group All Code

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

ゾーン – イントラネット

URL – http://srv/*

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

アセンブリ

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

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

メンテナンス

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

LocalIntranet ファイル ダイアログ

MySet ファイル IO

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

Group

Group

Page 30: デブサミ2008 .NETの仕組み

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

役割ごとにユーザーをグループ化した「ロール」単位で行うセキュリティ制御

ロールは Windows OS のアカウントに非依存 ロールは Windows のグループア カウントにマップ可能 独自のカスタム ロールも構成可能

. NET Framework 実行環境が標準で備えている 主にビジネス ロジックの制御で利用する 一つの実行スレッドに対して、一つの Principal オブ

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

Page 31: デブサミ2008 .NETの仕組み

Principal オブジェクト スレッドごとの Principal オブジェクト

各スレッドに Principal オブジェクトが関連付けることができる

Principal オブジェクトは、ユーザー識別情報やその人が属するロール情報が含まれる

プログラムで任意の Principal オブジェクトを作り、関連付けることができる

実行者の Windows アカウントを Principal オブジェクトに反映させることもできる

ASP.NET では、ログインしたユーザーの情報が Principal オブジェクトに自動的に反映される

Identity & Role

Page 32: デブサミ2008 .NETの仕組み

まとめ キーポイント

サイド バイ サイド アセンブリとその配置 コード アクセス セキュリティ

.NET Framework において重要な知識です。

興味をお持ちいただけたら、是非より深い知識を追ってみてください。

Page 33: デブサミ2008 .NETの仕組み

参考書籍 興味を持った方の必読書

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

Page 34: デブサミ2008 .NETの仕組み

4 月 15-16 日 ザ・プリンス パークタワー東京

Page 35: デブサミ2008 .NETの仕組み

すべての開発者を {ヒーロー } にする 3製品 ~ Visual Studio 2008 、 Windows Server 2008 、 SQL Server 2008 ~ の製品最新情報を Web にてお届けします。

イベントへの登録製品情報ウェブキャストパートナー様情報  etc 

順次コンテンツ拡大中!

www.microsoft.com/japan/heroes

Page 36: デブサミ2008 .NETの仕組み

© 2008 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.