デブサミ2008 .NETの仕組み

Preview:

DESCRIPTION

4年前の資料なり

Citation preview

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

14-B-4

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

ズム

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

はじめに

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

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

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

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

.NET Framework の概要

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

包含

共存

.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コンパイラ

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

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

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

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

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

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

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

Common Language Runtime

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

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

クラス ローダ

JIT コンパイラ

ネイティブ コード実行

クラスライブラリPreJIT

コンパイラ

セキュリティチェック

セキュリティ

アセンブリ

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

Visual Basic

Visual C# C# コンパイラ

VB コンパイラ中間言語

MSIL

アセンブリ

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

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

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

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

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

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

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

アセンブリ

MANIFESTメタデータ

IL

メタデータ

IL リソース

メタデータ

IL

アセンブリ名 簡易名

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

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

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

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

テキスト

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

簡易名

厳密名

秘密キー

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

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

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

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

アセンブリから実行まで

アセンブリの実行

アセンブリローダ

マネージEXE

JITコンパイラ

MSCorEE.dll

Windows

ヘッダー解析

起動

ロード・初期化

自身のロード

必要な型のロード

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

MSCorWks.dll

実行

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

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

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

32bit のMSCorEE.dll

64bit のMSCorEE.dll

アセンブリのヘッダ

構成ファイルetc

CLR 1.0 のMSCorWks.dll

CLR 1.1 のMSCorWks.dll

CLR 2.0 のMSCorWks.dll

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

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

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

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

場合 )

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

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

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

codeBase 要素

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

Probing

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

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

見つからなければFileNotFound

Exception

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

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

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

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

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

配置

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

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

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

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

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

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

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

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

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

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

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

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

異なるバージョンの共有 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

セキュリティ

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

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

ngName 、 Hash コードグループ

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

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

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

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

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

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

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

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

アクセス許可の付与

アセンブリ CLR

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

Group All Code

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

ゾーン – イントラネット

URL – http://srv/*

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

アセンブリ

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

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

メンテナンス

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

LocalIntranet ファイル ダイアログ

MySet ファイル IO

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

Group

Group

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

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

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

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

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

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

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

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

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

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

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

Identity & Role

まとめ キーポイント

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

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

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

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

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

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

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

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

順次コンテンツ拡大中!

www.microsoft.com/japan/heroes

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

Recommended