デブサミ2008 .netの仕組み
DESCRIPTION
4年前の資料なりTRANSCRIPT
![Page 1: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/1.jpg)
新村 剛史マイクロソフト株式会社デベロッパー&プラットフォーム統括本部デベロッパービジネス本部シニア プロダクト マネージャー
14-B-4
今こそ知りたい!.NET Framework のメカニ
ズム
![Page 2: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/2.jpg)
アジェンダ はじめに .NET Framework の概要 ソースコードからのコンパイル アセンブリ アセンブリから実行まで 配置 セキュリティ まとめ
![Page 3: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/3.jpg)
はじめに
![Page 4: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/4.jpg)
本セッションの目的 .NET Framework 初めての方
.NET Framework の実行の仕組みを理解していただく。
.NET 開発者の方 CLR に対する理解を深めるきっかけとして
いただくき、トラブルを未然に防ぐための一助とする。
![Page 5: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/5.jpg)
.NET Framework の概要
![Page 6: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/6.jpg)
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の仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/7.jpg)
.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の仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/8.jpg)
共通言語ランタイム (CLR) のメリット
CLR を使用することで受ける恩恵 異なるプログラミング言語での簡単な連携
異なる言語で記述された DLL を他の言語から利用できる 複数言語間のクラス継承、例外処理
高度なバージョン管理 参照する側が参照先のバージョンを知っている サイド バイ サイド実行
ランタイムによるセキュリティ向上 コード アクセス セキュリティ ロール ベース セキュリティ
![Page 9: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/9.jpg)
ソースコードからのコンパイル
![Page 10: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/10.jpg)
.NET アプリケーションの動作
Common Language Runtime
ソースコードアセンブリEXE/DLL
( 中間コード + メタデータ )
クラス ローダ
JIT コンパイラ
ネイティブ コード実行
クラスライブラリPreJIT
コンパイラ
セキュリティチェック
セキュリティ
![Page 11: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/11.jpg)
アセンブリ
言語別コンパイラ 言語別のコンパイラ と ひとつの中間言語 CLR が解釈可能な中間言語にコンパイル
Visual Basic
Visual C# C# コンパイラ
VB コンパイラ中間言語
MSIL
![Page 12: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/12.jpg)
アセンブリ
![Page 13: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/13.jpg)
アセンブリ アセンブリとは
配置とバージョン管理の単位 プライベートアセンブリと共有アセンブリ
アセンブリに含まれるもの MANIFEST
自己記述型のアセンブリ情報 アセンブリの ID 、厳密名情報、バージョン情報、カルチャ 含まれる型やリソースの情報 参照しているアセンブリの情報 実行に必要な許可セット情報など
IL JIT コンパイラへの入力となる中間言語
メタデータ 型とメソッドに関する情報
リソース 文字列や画像、永続化されたデータなど
アセンブリ
MANIFESTメタデータ
IL
メタデータ
IL リソース
メタデータ
IL
![Page 14: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/14.jpg)
アセンブリ名 簡易名
テキストベースの単純な名前 アセンブリ内の ( コアの ) ファイルの名前と連動
Prog01.dll のアセンブリ名は、 Prog01
厳密名 開発者 ( 発行者 ) の公開キーを割り付けた名前
開発者が異なれば、厳密名は異なる 共有 DLL ( 共有アセンブリ ) 、バージョン管理などで利用
テキスト
テキスト バージョン カルチャ 公開キー+ + +
簡易名
厳密名
秘密キー
![Page 15: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/15.jpg)
アセンブリのバージョン管理 厳密名
バージョンもアセンブリ区別の対象となる
DLL HELL からの解放 複数のバージョンの DLL を管理可能 前提とするバージョンの DLL を勝手に更新しな
い
サイド バイ サイド 実行 適切なバージョンの DLL を検索し、ロード
![Page 16: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/16.jpg)
アセンブリから実行まで
![Page 17: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/17.jpg)
アセンブリの実行
アセンブリローダ
マネージEXE
JITコンパイラ
MSCorEE.dll
Windows
ヘッダー解析
起動
ロード・初期化
自身のロード
必要な型のロード
コンパイル・コードの検証
MSCorWks.dll
実行
![Page 18: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/18.jpg)
ランタイムバージョンの選定 アセンブリのファイル ヘッダで実行する 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の仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/19.jpg)
アセンブリ ローダ タイプ チェック
マニフェストの確認 アセンブリの内容の確認
署名の確認 厳密名かつ GAC 以外からロードした場合 GAC に登録されている場合は GAC 登録時にチェック
バージョン選定 同一型名のアセンブリから適切なバージョンを選択 ( 厳密名の
場合 )
パーミッションの設定 エビデンスの取得 ポリシーの取得とパーミッションの設定
![Page 20: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/20.jpg)
アセンブリの検索GAC (Global Assembly Cache)
• 厳密名を持つアセンブリのみ
codeBase 要素
• アプリケーション構成ファイルに記載される
Probing
• アセンブリ名を基にした検索 [アセンブリ名] + .dll or .exe• 以下のディレクトリを対象に検索
• アプリケーション ベース ディレクトリ• プライベート Binpath
見つからなければFileNotFound
Exception
![Page 21: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/21.jpg)
JIT コンパイラ JIT (Just In Time) コンパイラ
実行時に未コンパイルの MSIL を Native コードにコンパイル
コンパイル後の Native コードはメモリに格納
一度コンパイルされた型は再度コンパイルされない
NGen.exe による事前コンパイルも可能
![Page 22: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/22.jpg)
配置
![Page 23: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/23.jpg)
アセンブリの配置場所 任意のディレクトリ
単一のアプリケーションからしか使用しない場合 構成ファイルの <codeBase> を使用して検索場所を指定
厳密名を持つ場合 コンピュータ、イントラネット、インターネットの任意の場所
厳密名を持たない場合 アプリケーションのディレクトリ、もしくはサブディレクトリ
GAC (Global Assembly Cache) 複数のアプリケーションで共有する場合 厳密名を持つ場合のみ登録可能 gacutil.exe を使用して アセンブリのインストールや削除を行う
![Page 24: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/24.jpg)
.NET での配置方法 配置の特徴
レジストリへの登録は不要 アセンブリ単位で管理される 高度なバージョン管理が可能
配置方法 XCopy による配置 (XCopy デプロイメント )
単純なファイルのコピー Windows インストーラを利用した配置
.msi ファイルを利用したセットアップ プログラム ClickOnce
HTTP を利用して Web サーバーからダウンロード
![Page 25: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/25.jpg)
アセンブリのサイド バイ サイド実行
異なるバージョンの共有 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の仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/26.jpg)
セキュリティ
![Page 27: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/27.jpg)
セキュリティ コード アクセス セキュリティ
エビデンス URL 、 Site 、 Zone 、 ApplicationDirectory 、 Publisher 、 Stro
ngName 、 Hash コードグループ
エビデンスの組み合わせ アクセス許可セット
完全信頼、部分信頼 ポリシー
エンタープライズ、マシン、ユーザー、 AppDomain
ロールベース セキュリティ ロールと Principal オブジェクト
![Page 28: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/28.jpg)
コード アクセス セキュリティとは コード アクセス セキュリティ
プログラムの実行時、アセンブリに対して、リソース アクセスや特定操作に関して行われるアクセス制御
エビデンス ベースのセキュリティ .NET Framework 実行環境が標準で備えている
証拠 ( エビデンス ) の提示
アクセス許可の付与
アセンブリ CLR
![Page 29: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/29.jpg)
セキュリティポリシー コードグループとアクセス許可セットとの対応付け
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の仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/30.jpg)
ロール ベース セキュリティとは ロールベースセキュリティとは
役割ごとにユーザーをグループ化した「ロール」単位で行うセキュリティ制御
ロールは Windows OS のアカウントに非依存 ロールは Windows のグループア カウントにマップ可能 独自のカスタム ロールも構成可能
. NET Framework 実行環境が標準で備えている 主にビジネス ロジックの制御で利用する 一つの実行スレッドに対して、一つの Principal オブ
ジェクトが関連付いている 実行者を表す Principal オブジェクトを元に制御する
![Page 31: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/31.jpg)
Principal オブジェクト スレッドごとの Principal オブジェクト
各スレッドに Principal オブジェクトが関連付けることができる
Principal オブジェクトは、ユーザー識別情報やその人が属するロール情報が含まれる
プログラムで任意の Principal オブジェクトを作り、関連付けることができる
実行者の Windows アカウントを Principal オブジェクトに反映させることもできる
ASP.NET では、ログインしたユーザーの情報が Principal オブジェクトに自動的に反映される
Identity & Role
![Page 32: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/32.jpg)
まとめ キーポイント
サイド バイ サイド アセンブリとその配置 コード アクセス セキュリティ
.NET Framework において重要な知識です。
興味をお持ちいただけたら、是非より深い知識を追ってみてください。
![Page 33: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/33.jpg)
参考書籍 興味を持った方の必読書
プログラミング .NET Framework 第 2版 Jeffrey Richter 著 吉松 史彰 監訳 日経 BP ソフトプレス
![Page 34: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/34.jpg)
4 月 15-16 日 ザ・プリンス パークタワー東京
![Page 35: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/35.jpg)
すべての開発者を {ヒーロー } にする 3製品 ~ Visual Studio 2008 、 Windows Server 2008 、 SQL Server 2008 ~ の製品最新情報を Web にてお届けします。
イベントへの登録製品情報ウェブキャストパートナー様情報 etc
順次コンテンツ拡大中!
www.microsoft.com/japan/heroes
![Page 36: デブサミ2008 .NETの仕組み](https://reader036.vdocuments.net/reader036/viewer/2022062303/557ad543d8b42a0b188b532b/html5/thumbnails/36.jpg)
© 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.