View
816
Download
3
Category
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