Nguồn gốc của .NET
Đầu năm 1998, sau khi hoàn tất version 4 của Internet Information Server  (IIS), một đội lập trình ở Microsoft nhận thấy họ còn rất nhiều sáng kiến để  kiện toàn IIS. Họ bắt đầu thiết kế một architecture mới dựa trên những ý đó và  project đuợc đặt tên là Next Generation Windows Services (NGWS).
Sau khi  Visual Basic 6 đuợc trình làng vào cuối năm 1998, dự án kế tiếp mang tên Visual  Studio 7 đuợc xáp nhập vào NGWS. Đội ngũ COM+/MTS góp vào một universal runtime  cho tất cả các ngôn ngữ lập trình trong Visual Studio, mà họ có ý định cho ngay  cả các ngôn ngữ lập trình của công ty khác dùng luôn.
Công tác nầy được giữ  bí mật mãi đến hội nghị Professional Developers' Conference ở Orlando vào tháng  7/2000. Đến tháng 11/2000 thì Microsoft cho phát hành Beta 1 của .NET gồm ba CD.  Tính đến lúc ấy thì Microsoft đã làm việc trên dự án ấy gần ba năm rồi. Điều ấy  cắt nghĩa tại sao Beta 1 version tương đối rất vững chải.
.NET mang dấu tích  những sáng kiến đã được áp dụng trước đây như p-code trong UCSD Pascal cho đến  Java Virtual Marchine. Có điều Microsoft góp nhặt những sáng kiến của người  khác, kết hợp với những sáng kiến của chính mình để làm nên một sản phẩm ăn rơ  từ trong ra ngoài. Có lẽ cuối năm 2001 hay đầu năm 2002 Microsoft mới phát hành  .NET. Có người hỏi Microsoft xem .NET quan trọng như thế nào. Các "xếp" của  Microsoft cho biết 80% tài khóa Research & Development (Nghiên cứu và Triển  khai) của Microsoft trong năm 2001 được dành cho .NET, và tối hậu, tất cả sản  phẩm của Microsoft đều sẽ được dọn nhà qua .NET platform.
Nhìn qua .NET Framework
.NET gồm có hai phần: Framework và Integrated Development Environment  (IDE). Framework cung cấp tất cả những gì cần thiết căn bản. Chữ Framework có  nghĩa là cái Khung hay khung cảnh trong đó ta dùng những hạ tầng cơ sở theo một  qui ước nhất định để công việc trôi chảy. Còn IDE cung cấp một môi trường giúp  ta triển khai dễ dàng, nhanh chóng hơn. Nếu không có IDE ta cũng có thể dùng  Notepad và line commands để triển khai nhưng nó chậm hơn. Do đó, nếu có chỗ nào  IDE genareted code có vẽ quá rắc rối, bạn nên trở về Framework để xem mình thật  sự tối thiểu cần những thứ gì. Vì nói cho cùng, Framework là quan trọng nhất,  còn IDE bất quá chỉ là một công cụ gắn lên phía trên Framework thôi. Trong .NET,  C# và VB.NET đều dùng cùng một IDE.
Thứ nhất, ta thấy Framework của .NET gói Operating System (OS) lại, khiến  lập trình viên không phải quan tâm đến những việc liên hệ đến OS như file  handling và memory allocation. Nó cho ta mọi tầng lớp triển khai phần mềm từ  việc trình bày (presentation) cho đến các bộ phận (components) và dữ kiện  (data).
Thứ hai, .NET đã được thiết kế từ con số không để giúp ta có thể lập  trình cho Internet dễ dàng như cho desktop.'

Tầng dưới chót
Trong hình trên, ở tầng dưới chót là Common Language  Runtime (CLR) . Ðây là trung tâm điểm của .NET Famework, nó là hầm máy để chạy  các năng tính của .NET. Nó gồm có một hệ thống chung cho data types (các loại dữ  kiện) để giúp việc thừa kế từ các ngôn ngữ lập trình khác nhau có thể thực hiện  đuợc.
Ngoài việc allocation và management of memory, CLR còn giữ các  refrerence đến objects và đỗ rác (handle garbage collection), tức là thâu lại  các mảnh vụn memory không cần dùng nữa. Trước đây, mỗi khi một DLL đuợc loaded  vào memory, system sẽ ghi nhận có bao nhiêu task dùng nó để khi task cuối cùng  chấm dứt thì system unload DLL và trả lại phần memory nó dùng trước đây để  system dùng cho chuyện khác. Chớ nếu allocate memory để dùng mà không nhớ  dispose nó thì sẽ bị memory leak (rỉ ), lần lần ta dùng hết memory, bị bắt buộc  phải reboot OS. Nhưng bây giờ .NET dùng một process độc lập để làm việc garbage  collection. Cả hai cách góp lại memory nầy đều có ưu và khuyết điểm tùy theo  tình huống.
CLR có thể đuợc trình bày chi tiết hơn như dưới đây:

.NET cho phép các ngôn ngữ lập trình khác nhau có thể được compile ra một  ngôn ngữ trung gian, gọi là Microsoft Intermediate Language (MSIL) hay gọi tắt  là Intermediate Language (IL), giống giống như p-code hay Java Byte-Code. Nếu  trong Java ta cần Java Vitual Machine thì ở đây ta cần CLR để chạy chương trình.  Ðộc lập với CPU hardware, IL code chạy trong CLR đuợc nói là managed code. Tức  là CLR lãnh trách nhiệm dòm ngó, không cho code làm bậy như nhảy đến một chỗ  không tưởng, viết bừa chồng lên memory của người khác hay đi ngoài giới hạn của  một array.
Khi IL code chạy, nó đuợc chuyển ra machine language của target  CPU bằng một Just-in-Time (JIT) Compiler. Trong .NET, Microsoft yểm trợ các ngôn  ngữ C++, JScript, VB.NET (còn gọi là VB 7) và C# (đọc là C sharp, như nốt C với  dấu thăng trong âm nhạc), một ngôn ngữ mới do guru Anders Hejlsberg chế ra.  Hejlsberg là người thiết kế Delphi ở Borland trước đây.
Microsoft đã bỏ J++. Người ta nói hầu hết .NET Framework đuợc viết bằng  C#, có lẽ rất nhiều code của MFC (Microsoft Foundation Classes) và J++ Class  libraries đều đuợc port qua C# một cách dễ dàng vì C# rất giống Java.
Một số  công ty đang hợp tác với Microsoft để triển khai các ngôn ngữ Cobol, Eiffel,  Lisp, Python và Smalltalk cho CLR. Công ty Rational, hảng bán công cụ nổi tiếng  UML Rose, sắp hoàn thành một Java to IL compiler. Dĩ nhiên, ta biết đây chỉ là  một chiêu thức tiếp thị của Microsoft mà thôi. Chớ nói lập trình bằng Java mà  không hưởng những phúc lợi của J2EE platform APIs như RMI (Remote Method  Invocation), JDBC (Java Database Connectivity), JSP (Java Sever Pages), .v.v..  thì như nói trong tiếng Anh có câu "the syntax says Java. but Java it ain't!"  (cú pháp là Java, nhưng chả là Java gì cả).
Thật ra, trên lý thuyết, muốn thêm một ngôn ngữ lập trình mới vào .NET ta  chỉ cần làm sao ngôn ngữ theo đúng qui ước ngôn ngữ của IL gọi là Common  Language Specification (CLS), rồi viết một compiler để compile từ ngôn ngữ ấy ra  IL. Nói thì dễ, nhưng để Visual Basic comply với CLS, Microsoft đã biến dạng VB6  ra VB7 mà lơ mơ chúng ta nhận không ra là Visual Basic.
Nói tóm lại, .NET chỉ yểm trợ một ngôn ngữ duy nhất, IL. Qua IL ta có  inheritance lai giống giữa các ngôn ngữ khác nhau. Ở tầng IL ta có debugger dùng  cho mọi ngôn ngữ.
Trong Framework, các classes cung cấp tất cả các dịch vụ và  APIs cần thiết cho việc triển khai lập trình ứng dụng. Chúng được sắp xếp theo  tầng lớp (hierarchy) và tự có documentation (cẩm nang).