.NET Framework

Microsoft .NET Frameworkは、マイクロソフトが開発したアプリケーション開発・実行環境である。

Windowsアプリケーションだけでなく、XML WebサービスやウェブアプリケーションなどWebベースのアプリケーションなども包括した環境となっている。一般に.NETという場合、.NET全体の環境を指す。現在はOSS版の.NET CoreやMonoも包括した技術仕様の総称を.NETと呼び、プロプライエタリの初期から存在する従来のWindows専用実装のみを.NET Frameworkと呼んで区別している。

バージョン4.8をもって.NET Frameworkのメジャーアップデートを終了することがアナウンスされている。セキュリティとバグ修正のための更新は継続されるが、以降の新規開発における推奨環境は.NET Coreの次期バージョン「.NET 5」およびそれ以降である。

1. アーキテクチャ
----------

1.1. 共通言語基盤
-----------

.NET Frameworkにおける最も重要な概念は共通言語基盤  に含まれている。CLIの目的は言語に依存しない開発環境および実行環境を提供することである。マイクロソフトによるCLIの実装は共通言語ランタイム  と呼ばれる。CLRは次の主要な5項目からなる。

共通型システム 
共通言語仕様 
共通中間言語 
ジャストインタイムコンパイラ 
仮想実行システム 

1.2. アセンブリ
----------

CILのコードはアセンブリの中に格納される。アセンブリは配置・バージョン・セキュリティの単位である。

1.3. メタデータ
----------

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

2. 設計目標と重要な特徴
-------------

.NET Frameworkは次のような目標に基づいて設計されている。

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

3. 用語
-----

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

4. 開発環境
-------

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

4.1. 統合開発環境
-----------

.NET Frameworkに対応しているものは以下。

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

4.2. Microsoft Visual Studio へのプラグイン
------------------------------------

[1] - ジェットブレインズ

5. オープンソース化
-----------

2014年11月12日、米国マイクロソフトによるイベント「Connect;」で、.NET Frameworkのうち下記の物をMITライセンスの下で公開したことが発表された。

.NET Framework 4.6 リファレンスソース
ASP.NET 5
Entity Framework 6
.NET Core 5 
.NET Compiler Platform これらは製品レベルの実装であり、シェアードソース実装ではない。ターゲットとして、既存のWindowsプラットフォームの他に、LinuxとOS Xが含まれる。

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

6. マイクロソフト社以外の実装
----------------

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

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

7. Windows以外のプラットフォームでの実装
-------------------------

Mono オープンソースプロジェクトによる.NET Framework互換環境の実装。統合開発環境としてMonoDevelopがある。 DotGNU Project オープンソースプロジェクトによる.NET Framework互換環境の実装。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がリリースされている。

8. バージョン
--------



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

8.2. .NET Framework 1.0
-----------------------

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

8.3. .NET Framework 1.1
-----------------------

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

.NET Framework 1.0からの主な変更点

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

8.4. .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ビットシステムへの対応
.NET Micro Frameworkの追加
多数のAPIの変更

8.5. .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  XMLに基づく新しいユーザインタフェースサブシステム。Windows Communication Foundation  新しい通信サブシステム。Windows Workflow Foundation  ワークフローによるアプリケーション開発のためのフレームワーク。Windows CardSpace  ユーザの個人情報をセキュアに管理し、統一されたアクセス方法を提供するためのフレームワーク。

8.6. .NET Framework 3.5
-----------------------

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

主に含まれる変更点は

ASP.NET AJAXの対応
Language Integrated Query
C#とVBコンパイラの変更等がある。

8.7. .NET Framework 4
---------------------

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

F# のフル サポート
動的言語ランタイム 
Managed Extensibility Framework 
Parallel Extensions
Velocity
ナチュラルユーザーインターフェイスアプリケーションの開発など。

8.8. .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スタイル アプリケーションの開発
非同期プログラミング
既存機能の大幅な改良4.5.1が2013年10月12日にリリースされた。Windows 8.1に標準搭載されている。4.5.2が2014年5月5日にリリースされた。なお.4.5.1はVisual Studio 2013で対応したが、追加パッケージ  をインストールすることで、Visual Studio 2012にて4.5.1以降を開発に利用することも可能である。

8.9. .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日にリリースされた。

8.10. .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がリリースされた。

8.11. .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がリリースされた。

9. 脚注
-----

10. 関連項目
--------

アンダース・ヘルスバーグ - マイクロソフト社の.NET Framework設計者
.NET Core

11. 外部リンク
---------

[2]
[3]
[4]
[5]
[6]
[7]
[8]

11.1. インストール方法
--------------

[9]