.NET框架

.NET框架 1.0

完整版号- 1.0.3705
这是最早的.NET架构，于2002年发行。它可以以一个独立且可重新分发的包的形式或在一个软件发展工具包集中被获得。它也是第一个微软Visual Studio .NET的发行版的一部分（也被称作Visual Studio .NET 2002）。

.NET框架 4.5.2

.NET框架 4.5.2的发表宣布于2014年5月5日。此版本需要Windows Vista SP2及更新版本。对于Windows Forms应用程序，对高DPI方案进行了改进。对于ASP.NET，可以使用更高可靠性的HTTP开头检查和修改方法，这是一种规划背景异步工作任务的新方法。

.NET框架 4.6

.NET框架 4.6 是在2014年11月12月宣布，而在2015年7月20日发行。 它对64位系统支持一个新的即时编译（JIT），称之为RyuJIT，呈现较佳的性能，并支持SSE2与AVX2指令集。WPF 与 Windows Forms 都获得更新以达成较高的DPI 情境。支持TLS 1.1 与 TLS 1.2 的功能已经被加入WCF。 此版本需要Windows Vista SP2 或更新的版本。

.NET框架 4.7.1

.NET框架 4.7.1 在2017年10月17日发行。在修复程序和新功能中，它修正了d3dcompiler依赖性问题。 
它还增加了与.NET Standard 2.0开箱即用的兼容性。

.NET框架 4.7.2

.NET框架 4.7.2 在2018年4月30日发行。主要的异动是改进ASP.NET、BCL、CLR、ClickOnce、Networking、SQL、WCF、Windows Forms、Workflow 及 WPF。

CLR与CLI

.NET的初级组成是CLI和CLR。CLI是一套运作环境规范，包括一般系统、基础类库和与机器无关的中间代码，全称为Common Language Infrastructure。CLR则是确认操作密码符合CLI的平台。在通用中间语言（CIL）运行前，CLR必须将指令及时编译转换成原始机器代码。
所有CLI都可经由.NET自我表述。CLR检查元数据以确保正确的方法被调用。元数据通常是由语言编译器生成的，但开发人员也可以通过使用客户属性创建他们自己的元数据。
如果一种语言实现生成了CLI，它也可以通过使用CLR被调用，这样它就可以与任何其他.NET语言生成的数据相交互。CLR也被设计为操作系统无关性。
当一个汇编体被加载时，CLR运行各种各样的测试。其中的两个测试是确认与核查。在确认的时候，CLR检查汇编体是否包含有效的元数据和CIL，并且检查内部表的正确性。核查则不那么精确。核查机制检查代码是否会运行一些“不安全”的操作。核查所使用的算法非常保守，导致有时一些“安全”的代码也通不过核查。不安全的代码只有在汇编体拥有“跳过核查”许可的情况下才会被运行，通常这意味着代码是安装在本地上的。
通过.NET，你可以用SOAP和不同的web服务进行交互。

标准化和著作权

2000年8月，微软、惠普和英特尔共同制定CLI和C#编程语言的标准规格。2001年12月，以上两者通过并成为ECMA标准规格。（ECMA 335和ECMA 334）。ISO亦于2003年4月跟随（ISO/IEC 23271和ISO/IEC 23270）。
这会有一定的风险，但它可以鼓励标准联合的实现，以提供一座桥梁来把非Windows的软件转变为微软.NET。将此推广为标准的一个团体是国际.NET联合会（INETA）。
尽管微软及其他合作伙伴持有CLI及C#的专利，ECMA和ISO要求所有专利都应该遵守“合理与非歧视准则”。除此之外，这些公司亦同意让用户免费使用这两项专利。
不过，这并不包括.NET框架内并不为ECMA/ISO标准涵盖的范围，这包括了：Windows Forms、ADO.NET及ASP.NET。微软对上述部件所持有的专利，使开发者未必能够为非微软平台开发出一套完整的作品。
2014 年11月13日，微软新任首席执行官萨帝亚·纳德拉决心下，该公司发布的.NET源代码包含了服务器部分的核心，如.NET Framework Libraries、.NET Core Framework Libraries和RyuJit VM，正式对外开放源代码。

.NET与Java EE

公共语言基础（CLI），通用中间语言（CIL）以及C#与甲骨文公司的Java虚拟机和Java之间有不少的相似之处，因此它们无疑是强烈的竞争者。它们两者都使用它们各自的中间码（在微软，它们叫做通用中间语言，而在Oracle，它们叫字节码）。通用中间语言被设计来即时编译（JIT），而Java的字节码在最初的时候则是设计成用于解释运行，而非即时编译。.NET现在只在Windows上被完美地支持，而Java则可在很多平台上被完好支持。然而，现在一些正在开发中的实现版本例如Mono或者Shared source CLI可以用于在类Unix操作系统例如Linux，FreeBSD和Mac OS X上运行.NET应用程序。甲骨文公司的一个产品，J2EE提供与微软的一些捆绑于Windows中的技术例如COM+（先前的MTS）和MSMQ等效的功能。
Java和.NET可经由IKVM，一个在.NET平台上实现的Java虚拟机作更多的沟通。
Java有其专门的远程程序调用技术RMI（Remote Method Invocation）, RMI的另一版本RMI-IIOP更可兼容CORBA。
然而，.NET与Java之间的竞争关系，在.NET Core出现后，一切都改观了。

.NET与COM

前一版软件组件技术由Microsoft所提出的COM，该技术被用来创建大型（large-scale）的软件系统上，使用COM+ 或MTS对于传统分布式组件有强化的作用。当.NET将COM-objects封装成.NET组件以及将.NET组件封装成COM-objects后，Microsoft分别将他命名为Runtime Callable Wrapper（RCW）和COM Callable Wrapper（CCW）。很明显的，Microsoft最终将以.NET全面取代COM成为软件组件的架构。Microsoft希望开发者能够在Win32平台上使用.Net取代COM，而已经存在的服务则透过抽象接口来使用（如：当前交易的.Net组件仍然使用COM+）。

.Net Remoting与XML WebServices

.NET remoting属于行程（process）内沟通的抽象方法。
Microsoft® .NET Remoting提供一个丰富可扩展的框架给存在两个不同AppDomain中的Object，使得在不同行程（行程）和不同机器中能够进行无缝地沟通。.NET Remoting提供一种强大但简单的可编程模型并且在运行阶段支持数据交换。
XML Web services将基础的功能区块布署到网络的不同电脑上。开放标准的通信协议以及人和应用程序可以透过Web Services集成应用程序的环境来合作。应用程序可以从不同的来源使用多个XML Web Services来建构应用程序而不需要知道他们在哪里以及如何来运作。

.NET的语言

CLI被设计成支持任何面向对象的编程语言，分享共同对象模型与大型共同类库。.NET支持超过40种编程语言。这些编译器大都是免费的（软件厂商仅开发出售集成开发环境）。
大部分的语言都做了重大改变以搭配.NET框架。厂商通常利用这个机会来同时改变语言的其他特性。

ASP.NET & ADO.NET

ASP.NET是内含于.NET框架中，专门用来发展Web应用程序的一组类库集。
ADO.NET是内含于.NET框架中，专门处理与数据源沟通的数据访问类库集，被Windows Forms与ASP.NET应用程序大量使用，可说是.NET框架中唯一的数据访问接口。