.NET Framework

**.NET Framework**（ドットネット フレームワーク）は、Windows向けアプリケーション開発向けにランタイム環境とライブラリを統合的に提供するプラットフォームである。

共通言語ランタイム（CLR、メモリ管理やスレッド制御などを含む基本的な実行環境）と、広範な機能を提供する基本クラスライブラリにより、C#、Visual Basic .NET、F#など複数のプログラミング言語間での相互運用性が実現されている。

2000年代以降、Windows環境における標準的な開発基盤として普及したが、現在はクロスプラットフォーム対応の.NET環境（旧称：.NET Core）が推奨され、.NET Frameworkは互換性維持を目的としたメンテナンスフェーズにある。

## アーキテクチャ

### 共通言語基盤

.NET Frameworkにおける最も重要な概念は**共通言語基盤** (CLI) に含まれている。CLIの目的は言語に依存しない開発環境および実行環境を提供することである。マイクロソフトによるCLIの実装は共通言語ランタイム (CLR) と呼ばれる。CLRは次の主要な5項目からなる。
* 共通型システム (CTS: Common Type System)
* 共通言語仕様 (CLS: Common Language Specification)
* 共通中間言語 (CIL: Common Intermediate Language)
* ジャストインタイムコンパイラ (JIT: Just-in-time compiler)
* 仮想実行システム (VES: Virtual Execution System)
### アセンブリ

CILのコードはアセンブリ（WindowsにおいてはPE形式）の中に格納される。アセンブリは配置・バージョン・セキュリティの単位である。
### メタデータ

全てのCILコードはそれ自身の情報をメタデータとして保持している。CLRは正しいメソッド呼び出しが行われていることをメタデータによってチェックしている。メタデータはコンパイラによって生成されるが、開発者が独自のメタデータをカスタム属性として付加することも可能である。

## 設計目標と重要な特徴
.NET Frameworkは次のような目標に基づいて設計されている。
;相互運用性
:.NETアプリケーションや.NETクラスライブラリではないプログラムとの相互運用を可能にするためのアクセス方法を提供する。例えばCOMコンポーネントへのアクセスは`System.Runtime.InteropServices`や`System.EnterpriseServices`などの名前空間によって提供され、それ以外の機能はP/Invokeによって提供される。
;共通の実行環境
:.NET Frameworkにおいてはあらゆる言語で記述されたプログラムが共通中間言語と呼ばれる中間言語にコンパイルされる。マイクロソフトの実装では、この中間言語はJITコンパイラによって実行時にネイティブコードにコンパイルされる。これらの概念は共通言語基盤の仕様に含まれており、マイクロソフトによる共通中間言語の実装を共通言語ランタイムと呼ぶ。
;言語への非依存性
:.NET Frameworkは共通型システムと呼ばれる概念を導入した。共通型システムの仕様には共通言語ランタイムでサポートされるデータ型について定義されている。このため、複数の言語を用いた開発が可能になる。
;基本クラスライブラリ (BCL)
:基本クラスライブラリは全ての.NET Frameworkで利用可能なクラスライブラリである。BCLはファイル入出力、グラフィックス、データベース、XML文書処理など、多くの共通機能をカプセル化したクラス群を提供する。
;配置
:ソフトウェアをコンピュータにインストールする際、既にインストールされているソフトウェアとの相互干渉やセキュリティといった問題に注意しなければならない。.NET Frameworkはこういった要求に応えるための機能やツールを提供する。
;セキュリティ
:.NET Frameworkではサンドボックスの概念を用いることなく、様々な権限レベルでコードを実行することができる。

## 用語
;マネージコード
:CLRがメモリを完全に把握/管理できるコード。.NET Frameworkで作成するコードの大半はマネージコードである。マネージコード以外のコード（Win32アプリケーション、COMコンポーネントやアンセーフなコード）をアンマネージコードという。
;アプリケーションドメイン
:CLRから見たプロセス空間のようなもので、それぞれ独立したドメインの中でコードを動作させることができる。一つのアプリケーションはCLRを一つしかホストできないが、CLRには複数のアプリケーションドメインを持つことができる。
;メタデータ
:依存関係をはじめクラスや型、インタフェースなどコードに関する情報。
;属性
:メソッドやクラス、アセンブリに宣言できメタデータとして格納される情報。`System.Attribute`から派生させたクラスとして開発者が独自に作成でき、実行時に参照・利用できる（カスタム属性）。またCLRのみが認識できる擬似カスタム属性もある。
;アセンブリ
:アプリケーションを配置、利用するときの単位。アセンブリにはメタデータが含まれており、サテライトアセンブリを除き、モジュール、リソースも含まれている。アプリケーションドメインに読み込むことのできる最小の単位でもある。

## 開発環境
C#、Visual Basic .NET、F#、JScript .NETのコンパイラ、各種ツール、ドキュメントなどのSDKはマイクロソフトから無償で配布されている。

### 統合開発環境
.NET Frameworkに対応しているものは以下。
* Microsoft Visual Studio
* Visual Studio Code
* JetBrains Rider
* SharpDevelop - 2016年を最後に終了
* Embarcadero Prism - 2012年を最後に終了
* Borland C# Builder - 2006年を最後に終了
.NET Frameworkだけでなく、互換環境であるMonoや.NET Coreに対応しているものもある。

### Microsoft Visual Studio へのプラグイン
* ReSharper - ジェットブレインズ

## オープンソース化
2014年11月12日、米国マイクロソフトによるイベント「Connect();」で、.NET Frameworkのうち下記の物をMITライセンスの下で公開したことが発表された。
* .NET Framework 4.6 リファレンスソース
* ASP.NET 5
* Entity Framework 6
* .NET Core 1.0 (発表当初は5)
* .NET Compiler Platform ("Roslyn")

これらは製品レベルの実装であり、シェアードソース実装ではない。ターゲットとして、既存のWindowsプラットフォームの他に、LinuxとOS Xが含まれる。

.NET Framework 4.6 のリファレンスソースがMITライセンスになったことにより、それが Mono 4.0 に取り込まれた。

## マイクロソフト社以外の実装
また.NET Frameworkの基盤となっている仕様である共通言語基盤 (CLI) はEcmaインターナショナル、ISO、JISにて標準化されており、マイクロソフト以外のベンダーが独自に実装することもできる。実際にXamarinによるMonoプロジェクトをはじめ、いくつかのオープンソースによる実装プロジェクトがある。それらを使うことで.NET FrameworkでコンパイルしたプログラムをLinuxやmacOSなどのWindows以外のOSでも動かすこともできる。なお、マイクロソフトによるCLIの実装を共通言語ランタイム (CLR) と呼ぶ。.NET FrameworkはCLRにその他ライブラリ群を加えたものと言える。

では共通言語ランタイム上でJava仮想マシンの実装を試みるIKVM.NETなどのオープンソースプロジェクトも活発化している。

## Windows以外のプラットフォームでの実装
; Mono
: オープンソースプロジェクトによる.NET Framework互換環境の実装。統合開発環境としてMonoDevelopがある。
; DotGNU Project
: オープンソースプロジェクトによる.NET Framework（CLI+MS拡張）互換環境の実装。GPLに基づいて開発（一部ライブラリなどに例外等がある）。
; Shared Source CLI
: マイクロソフトによるFreeBSD/Mac OS X/Windows向けのECMA CLI/C#の実装。
; .net by au
: BREWプラットフォームを用いたKDDIおよび沖縄セルラー電話が提供するau携帯電話専用の.NET Framework互換環境の実装。ただし、利用できるのは法人専用端末のE05SH、E06SHの2機種とWindows XP Professional SP3がインストールされたPCのみ。
;.NET Core
: マイクロソフトによるクロスプラットフォームかつオープンソースのリファレンス実装。2016年6月27日にv1.0がリリースされている。

## バージョン

### CLR バージョンと共存性
各バージョンは上位互換性が概ねある。しかし、上位互換性が保証されているのは、CLR のバージョンが同じものであり、CLR のバージョンが同じ物は1つしかインストールできない。現在、下記の CLR バージョンが存在する。

* 1.0: .NET Framework 1.0
* 1.1: .NET Framework 1.1
* 2.0: .NET Framework 2.0〜3.5
* 4.0: .NET Framework 4.0〜4.8

### .NET Framework 1.0
.NET Frameworkの最初のバージョンである。Windows 98、NT 4.0、2000、XP向けに提供された。
Windows XP SP1のCD-ROMには標準でインストーラーが収録されている。

### .NET Framework 1.1
.NET Frameworkの最初のバージョン更新である。
Windows XP SP2およびSP3のCD-ROMには標準でインストーラーが収録されている。

.NET Framework 1.0からの主な変更点
*ASP.NETのモバイル向け機能の追加
*セキュリティ仕様の変更
*ODBCとOracle Database用のデータ接続の標準サポート
*IPv6のサポート
*多数のAPIの変更

### .NET Framework 2.0
いくつかのAPIの追加とCLRに変更が加えられた。次のような特徴を持っている。Microsoft Visual Studio 2005以降で開発可能である。
Windows Server 2003には標準搭載されている。Windows NT 4.0への対応はこのバージョンで打ち切られた。

.NET Framework 1.1からの主な変更点
*データバインディングの新しいAPIの追加
*ASP.NETのウェブコントロールを幾つか追加
*ネイティブアプリケーションへの新しいホスティングAPI
*CLRのジェネリクスの対応
*64ビット（x64とIA-64）システムへの対応
*.NET Micro Frameworkの追加
*多数のAPIの変更

### .NET Framework 3.0
もともと「WinFX」という名称で提供される予定だったが、提供の5か月前の2006年6月に現在の名称に変更された。Windows VistaやWindows Server 2008には標準搭載されている。Windows 98、ME、2000への対応はこのバージョンで打ち切られ、Windows XPより前のOSでは動作しない。

クラスライブラリやCLRなどの基盤は.NET Framework 2.0から変更されておらず、以下の4つの新しいテクノロジーを加えたものとなっている。

;Windows Presentation Foundation (WPF)
: XMLに基づく新しいユーザインタフェースサブシステム。
;Windows Communication Foundation (WCF)
: 新しい通信サブシステム。
;Windows Workflow Foundation (WF)
: ワークフローによるアプリケーション開発のためのフレームワーク。
;Windows CardSpace (WCS)
: ユーザの個人情報をセキュアに管理し、統一されたアクセス方法を提供するためのフレームワーク。

### .NET Framework 3.5
Windows 7に標準搭載されている。Visual Studio 2008以降で開発可能。Windows 8以降では既定で無効化されており、インターネット接続もしくはインストールメディアを利用して明示的な有効化すなわちインストールが必要となる。バージョン3.0と同様、CLRのバージョンは2.0のままで、いくつかの追加が行われている。.NET Framework 3.5のリリースと同時に基本クラスライブラリ (BCL) はMicrosoft Reference Licenseのライセンス下で公開された。また、J#言語が開発言語として対応を終了した。サポート終了は、バンドルしているWindowsのサポート終了日か2028年10月10日のどちらか短い方となる。

主に含まれる変更点は
*ASP.NET AJAXの対応
*Language Integrated Query
*C#とVBコンパイラの変更
等がある。

### .NET Framework 4
2010年4月13日にリリースされた。CLRのバージョンは4となる。Visual Studio 2010以降で開発可能。

* F# のフル サポート
* 動的言語ランタイム (DLR)
*  (MEF)
* （並列プログラミング）
* Velocity（分散キャッシュAPI）
* （Windows タッチ）アプリケーションの開発
など。

### .NET Framework 4.5
2012年8月15日にリリースされた。Windows 8に標準搭載されている。Visual Studio 2012以降で開発可能。CLRのバージョンは継続して4。前バージョンである.NET 4を置き換える形となっている。そのため.NET 4とは共存できないが、.NET 4.5は.NET 4とほぼ完全な互換性があるとされている。Windows XPへの対応が打ち切られ、Vista以降が必須となった。

*Windows Modernスタイル アプリケーション（Windowsストアアプリ）の開発
*非同期プログラミング
*既存機能の大幅な改良

4.5.1が2013年10月12日にリリースされた。Windows 8.1に標準搭載されている。4.5.2が2014年5月5日にリリースされた。なお.4.5.1はVisual Studio 2013で対応したが、追加パッケージ (Developer PackまたはTargeting Pack) をインストールすることで、Visual Studio 2012にて4.5.1以降を開発に利用することも可能である。

### .NET Framework 4.6
2015年7月20日にリリースされた。Windows 10 ver.1507に標準搭載され、Vista以降が必要。Visual Studio 2015にて対応。継続して4.xは一つのバージョンしかインストールできない。

* ASP.NET 5対応
* RyuJIT - 新しい64ビット版のJITコンパイラ
* .NET Native
* オープンソース化

4.6.1が2015年11月30日にリリースされた。4.6.1ではWindows Vista/Windows Server 2008のサポートが終了している。4.6.2は2016年8月2日にリリースされた。

### .NET Framework 4.7
Windows 10 ver.1703と同時に、2017年4月5日にリリースされた。これまでの.NET/Visual Studioの新バージョン公開スケジュールとは異なり、.NET 4.7よりもVisual Studio 2017のリリースが先行する形となった。旧OSへのバックポートもアナウンスされ、2017年5月2日に利用可能となった。なお、.NET Framework 4.7以降はWindows 10 ver.1507/1511についてはWindows 10 ver.1507/1511のサポートが終了しているため、サポート外になっている。

2017年10月17日、Windows 10 ver.1709と同時に4.7.1がリリースされた。
2018年4月30日、Windows 10 ver.1803と同時に4.7.2がリリースされた。

### .NET Framework 4.8
2019年4月18日に正式リリースされた。本バージョンをもって.NET Frameworkのメジャーアップデートは終了するが、バグ修正やセキュリティ修正のサポート、Windowsへの搭載は継続される。

Windows 11のInsider Previewビルド22504には、ARM64のネイティブサポートを追加した.NET Framework 4.8.1が搭載されることがアナウンスされた。

2022年8月9日、Windows 10 ver.20H2以降を対象に4.8.1がリリースされた。

## 脚注

## 関連項目
* アンダース・ヘルスバーグ - マイクロソフト社の.NET Framework設計者
* .NET
* NAudio

## 外部リンク
* .NET Foundation
* .NET Blog
* Microsoft/dotnet - GitHub
* Reference Source - Microsoft 社によるソースコード公開サイト
* .NET Framework ドキュメント | Microsoft Docs
* .NET Framework を学習する | Microsoft Docs
* .NET Framework のバージョンを整理する - @IT

### インストール方法
* .NET framework のインストール ガイド - .NET Framework | Microsoft Docs