.NET

문서의 이전 버전(r64)을 보고 있습니다.

역사 raw
대문 랜덤 문서 최근 토론

공식 사이트
1. 개요2. 버전
2.1. 5.x
3. [anchor(Framework)].NET Framework
3.1. CIL3.2. 주요 지원 언어3.3. 버전별 변경사항[* 출처는 MSDN 및 위키피디아]
4. [anchor(Core)].NET Core
4.1. 지원 언어4.2. 요구 사항
4.2.1. [[Windows]]4.2.2. [[macOS]]4.2.3. [[리눅스]]
4.3. 참고
5. 기타6. 관련 문서

1. 개요

마이크로소프트에서 개발한 Windows 프로그램 개발 및 실행 환경(프레임워크). MS가 공식 지원하는 오픈 소스 크로스 플랫폼 버전으로 Mono 등이 존재한다.

FCL(Framework Class Library, 프레임워크 클래스 라이브러리) 클래스는 .NET 프레임워크를 대상으로 하는 모든 언어가 사용할 수 있는 클래스들의 라이브러리이며, CLR(Common Language Runtime, 공용 언어 런타임) 클래스는 공통 언어 런타임 클래스로 알려져 있는데 이 클래스는 언어 외에도 보안, 메모리 관리, 기타 핸들링 역할을 제공하는 가상머신이기도 하다. 이 FCL과 CLR이 합쳐진 것이 .NET Framework이다.

2. 버전

Microsoft .NET
.NET Framework [ 펼치기 · 접기 ]
버전CLR
버전
출시 날짜이 버전과 같이 나온
Visual Studio 버전
설치된 Windows 버전지원하는 Windows
클라이언트서버
프리 베타-2000년 7월 11일----
1.0 베타 1-2000년 11월----
1.0 베타 2-2001년 6월 20일----
1.01.02002년 2월 13일.NET 2002--98 ~ XP
2000 Server
1.11.12003년 4월 24일.NET 2003-200398 ~ Vista
2000 Server ~ 2008
2.02.02005년 11월 7일2005-2003 R22000, XP
2000 Server ~ 2003 R2
3.02.02006년 11월 6일-Vista2008XP, Vista
2003 ~ 2008
3.52.02007년 11월 19일200872008 R2XP 이상의 모든 윈도우
4.04.0[4]2010년 4월 12일2010--XP ~ 7
2003 ~ 2008 R2
4.54.02012년 8월 15일201282012Vista ~ 8
2008 ~ 2012
4.5.14.02013년 10월 17일20138.12012 R2Vista ~ 8.1
2008 ~ 2012 R2
4.5.24.02014년 5월 5일---Vista ~ 8.1
2008 ~ 2012 R2
4.64.02015년 7월 20일201510 v1507-Vista ~ 10
2008 ~ 2012 R2
4.6.14.02015년 11월 12일2015 업데이트 110 v1511-7 ~ 10
2008 R2 ~ 2012 R2
4.6.24.02016년 8월 2일2017 v15.010 v16072016 TP5
(빌드넘버 14300)
7 ~ 10
2008 R2 ~ 2012 R2
4.74.02017년 4월 5일2017 v15.110 v1703-7 ~ 10
2008 R2 ~ 2016
4.7.14.02017년 10월 17일2017 v15.510 v17092016 v17097 ~ 10
2008 R2 ~ 2016 v1709
4.7.24.02018년 4월 30일2017 v15.810 v18032019
(빌드넘버 17666)
7 ~ 10
2008 R2 ~ 2019
4.84.02019년 4월 18일2019 v16.010 v1903-7 ~ 10
2008 R2 ~ 2019
.NET Core 제품군 [ 펼치기 · 접기 ]
버전출시일지원 종료일
1.02016년 06월 27일2019년 06월 27일
1.12016년 11월 16일
2.02017년 08월 14일2018년 10월 01일
2.12018년 05월 30일2021년 08월 21일
2.22018년 12월 04일2019년 12월 23일
3.02019년 09월 23일2020년 03월 03일
3.12019년 12월 03일2022년 12월 03일
5.0 Preview
2020년 03월 16일
5.0 RC1
2020년 09월 14일
5.0 RC2
2020년 10월 13일
5.0
2020년 11월 10일

2.1. 5.x

.NET 5.0은 마이크로소프트가 빌드 2019 컨퍼런스에서 처음 발표하고 2020년 11월에 출시한 버전이다.

새로운 .NET 5는 .NET Core, Xamarin 등이 하나로 합쳐진 버전으로 여러 운영체제 프로그램 개발이 가능하다. 하지만 .NET Framework는 더이상 릴리즈 되지 않으며 .NET Core는 .NET Framework의 새로운 크로스 플렛폼 버전이므로 .NET 5와 .NET Framework는 출발 지점이 다르다고 볼 수 있다.

다운로드

3. .NET Framework

3.1. CIL

.NET 프레임워크를 사용하는 언어들로 작성된 소스 코드는 각 언어에 맞는 컴파일러[5]를 거쳐 .NET CLR용 중간 코드인 CIL(Common Intermediate Language)로 컴파일된 후 .exe 파일로 래핑(wrapping)된다.[6] 그리고 .NET CLR은 이 파일을 JIT 컴파일 방식으로 읽어들여 기계어 번역을 수행한다. CIL은 .NET CLR이 설치된 곳이라면 어디서든 컴파일이 가능하다.

예로 들어서 Hello World를 출력하는 C# 코드가
using System;

namespace HelloWorld
{
	public class Program
	{
		private static void Main(string[] args)
		{
			Console.WriteLine("Hello, World!\n");
			Console.ReadLine();
		}
	}
}

이라면 컴파일 시 바뀌는 CIL 코드는
.class public auto ansi beforefieldinit HelloWorld.Program
extends [mscorlib]System.Object
{
.method private hidebysig static
void Main (
string[] args
) cil managed
{
.maxstack 8
.entrypoint
IL_0000: ldstr "Hello, World!\n"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000A: call string [mscorlib]System.Console::ReadLine()
IL_000F: pop
IL_0010: ret
}
.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
}
}
이렇게 된다.

3.2. 주요 지원 언어

  • C\# - 닷넷의, 닷넷에 의한, 닷넷을 위한 언어.
  • Visual Basic .NET - C#보다 단순하지만, 기능은 똑같아 .NET Framework 입문에 적절하다.
  • DLR - 동적 언어 런타임(Dynamic Language Runtime)으로 CLR에서 Python, Ruby 등의 동적 언어들을 돌리기 위한 프레임워크이다. IronPython과 IronRuby 등 타 언어를 C#과 같이 쓸 수 있다.
  • F\# - GPU 연산 등을 자체지원하는 연산에 특화된 언어이다
  • Delphi.NET

3.3. 버전별 변경사항[7]

* 표시가 된 항목은 출시 예정이다.
버전
변경사항
1.0
닷넷 프레임워크 첫 버전으로서, 핵심 구성 요소 및 기본 프로그래밍 언어를 처음으로 완성한 버전
1.1
ASP.NET 기능 강화 및 오라클 데이터베이스, ODBC, OLE DB 지원
2.0
제네릭 프로그래밍을 위한 제네릭 도입, ADO/ASP.net 에 새로운 프로그래밍 기술 추가, AMD64 프로세서 용 버전 출시
3.0[13]
4개의 주요 기능: 윈도우 프레젠테이션 파운데이션[14], 윈도우 커뮤니케이션 파운데이션[15], 윈도우 워크플로 파운데이션[16], 윈도우 카드스페이스[17] 추가.
3.5
기존 언어들[19]에 대한 지원과 새로운 기능이 대거 추가. 서비스 팩 1에서는 여러가지 기능들이 더 추가 및 확장
4.0
병렬 처리를 위한 Parallel Extension, Parallel Linq 기능 추가, C# 4.0에 다이나믹 타입, 임의 정밀도 정수[22] 타입, 복소수[23] 타입 추가.
4.5
메트로 앱 개발 공식 지원, 비동기 처리 기능이 추가된 C# 5.0 및 Visual Basic .NET 을 지원
4.6
64비트를 지원하는 RyuJIT, SSE2와 AVX2 지원, HiDPI 대응, TCF 1.1과 TLS 1.2 대응
4.7
ECC를 이용한 암호화 강화, TLS 1.2 개선, WPF에서 터치 및 스타일러스에 대한 추가 지원, WPF를 위한 프린트 API 지원
4.8
UWP의 플루언트 디자인을 윈폼, WPF에서 구현하는 것이 가능, 윈폼이나 WPF에서 UWP의 모든 컨트롤을 호스팅하는 것이 가능.

4. .NET Core

.NET Core는 윈도우 외의 운영체제가 닷넷을 사용할 수 있도록 하는 프로젝트. 라이선스는 MIT 라이선스아파치 라이선스[24]이다.

프로페셔널하고 편리한 C\#, 배우기 쉽고 간단하지만 강력한 Visual Basic.NET, 연산에 특화된 F, 이 세가지 언어로, 리눅스, 맥OS를 개발 할 수 있다는 소리. 그리고 웹 애플리케이션 개발용으로 ASP.NET Core를 사용 할 수 있다. 또한 .NET Standard를 통해 .NET Framework, Xamarin, Mono에 호환된다.

윈도우 외의 운영체제에서도 실행하도록 하는 프로젝트이지만, 컴파일 시 결과물은 PE DLL 파일로 나온다. 윈도우 비주얼 스튜디오에서 컴파일 시 EXE 파일도 나오지만, 실제 컴파일 결과물인 DLL 파일을 로드하여 실행하는 것에 불과하다. DLL 파일이 없으면 당연히 실행되지 않는다.

다른 운영체제들은 터미널로 .NET Core 런타임을 설치한 후 dotnet (실행할 닷넷 DLL 파일)를 입력하고 실행하면 된다.

참고로 .NET Core를 기반으로 한 ML.NET이라는 기계학습 플랫폼(라이브러리)도 존재한다, 그런데 이상하게도 리눅스에서만 지원된다.아니 멀티플랫폼 안될거면 왜 .NET Core를 쓰는건데

버전 3.0부터 드디어 GUI를 정식으로 지원한다. 그러나 Windows만 지원한다.
기존에는 CLI 개발만 가능 했었지만, 3.x 버전 부터는 Windows Form, WPF를 지원한다.

4.1. 지원 언어

4.2. 요구 사항

2.0 이상 기준

4.2.1. Windows


4.2.2. macOS

4.2.3. 리눅스

4.3. 참고

5. 기타

  • 라이브러리의 소스코드가 공개되어 있으며, 여기에서 확인할 수 있다. GitHub에도 있다.#
  • .NET 기반 프로그램은 바이럿과 같은 파일 감염형 바이러스에 감염되면 아예 실행이 되지 않는다.[30]
  • Any CPU 기능으로 프로그램이 운영체제 32, 64비트에 맞게 작동할 수 있다. 예로 들어서 64비트 환경에서 실행하면 64비트 프로세스로 실행되는 식이다. 다만 32/64 비트 C++ 라이브러리 호출(32 및 64비트 버전 돌다 없을 경우)이나 일부 코드[31]는 사용 불가능해진다.
  • 하위호환이 되지 않기 때문에 여러 버전을 같이 설치해야 한다. 3.5 버전을 설치하면 2.0이나 3.0도 호환이 가능한데, 3.5를 설치할 때 2.0과 3.0도 같이 설치돼서 그런 것 뿐이다. 그래도 Windows 7부터는 3.5 SP1 버전이 기본 설치되며, Windows Update를 통한 자동 설치를 지원하기 때문에 부담이 덜하다.
  • 설치를 계속 실패하는 경우, 알려진 해결책을 써도 해결이 안 되는 경우가 있다. Windows를 새로 업데이트하고 난 후에 이 현상이 발생했다면 그래픽 드라이버를 깔아서 업데이트를 해보자. 소프트웨어를 처음 업그레이드 할 경우 그래픽 드라이버가 전부 삭제되거나 비활성화 되어있는 경우가 자주 있어서 이런 듯.
  • 프레임워크 설치나 사용 과정에서 낮은 버전과 상위 버전이 꼬이는 오류 등으로도 설치실패나 에러가 계속 날 수 있는데 마이크로소프트 링크를 참조하면 개별 버전을 직접 설치하는 것도 가능하다. 그래도 안 되는 경우라면 마이크로소프트에서 제공하는 .NET Framework 클린 제거 도구를 사용하고 다시 설치하는 방법도 있다,
  • 비주얼 스튜디오를 사용하지 않는다고 프로그램을 만들 수 없는 것은 아니다. .NET Framework는 설치 시 컴파일러도 같이 설치되므로 컴파일러만으로 프로그램을 만들 수 있다.
  • 리눅스, macOS, iOS, 안드로이드 등 다른 플랫폼으로 포팅하려고 만들어진 오픈 소스판들이 존재한다.
    • Mono 프로젝트가 가장 유명하다. 프로젝트가 시작된 초기에는 리처드 스톨먼 등이 Mono는 잠재적으로 MS의 고소 위협에 시달릴 수 있으니 쓰지 말아야 한다고 주장하기도 했었다. 하지만 사티아 나델라가 MS의 CEO가 된 이후 오픈 소스 커뮤니티 끌어안기에 적극적으로 나서면서 MS가 세운 .NET Foundation과 MS가 인수한 Xamarin이 아예 Mono의 공식 개발 팀이 된 상태이다. 이로써 Mono 프로젝트는 법적 분쟁 가능성이 일소되었으면서 .NET과의 호환성도 확실히 보장되는 확실한 오픈 소스판이 되었다고 봐도 무방하다.
    • .NET Core라는 리눅스와 macOS에서 컴파일과 실행이 가능한 Mono와 별도의 오픈 소스 플랫폼이 존재한다. 하지만, 컴파일을 할 경우 결과물이 PE로 나온다. 이것도 .NET Foundation이 개발을 맡고 있고 Mono 최신판에 .NET Core가 이식되었다.
    • DotGNU라는, 한때 GNU 프로젝트의 일부였으나 현재는 여기서 제외된 오픈 소스 프로젝트도 있다.
  • .NET으로 운영 체제를 만들 수도 있다! 현재 Cosmos라는 C#이나 VB.NET 등으로 운영 체제를 만들 수 있는 오픈 소스 킷이 GitHub에 올라와 있다.[32]
  • 마이크로소프트가 빌드 2019 컨퍼런스에서 2020년 11월 경에 출시될 예정인 5.0 버전에서 현재까지 출시된 .NET Framework와 .NET Core, Xamarin 등이 하나의 플랫폼으로 합쳐질 것이라고 예고했다.# 정확히는 .NET Framework는 더 이상 업그레이드 되지 않고 .NET Core만 업그레이드 된다는 뜻이다. 또한 .NET Core는 넘버링을 맞추기 위해 3.0 버전 이후 4번대를 뛰어넘었고, 4.8 버전이 기존 닷넷 프레임워크의 마지막 메이저 버전이 되었다.
  • 2019년 9월 1일에 .NET Core가 3.0으로 업데이트 되면서 .NET Core를 사용한 Windows Forms와 WPF의 개발이 가능하게 되었다.
  • 와인(소프트웨어)에서 닷넷 기반 프로그램 실행이 가능하다. 다만 TmaxOS의 경우 호환 레이어 자체가 닷넷을 지원하지 않아서 실행이 불가능하다.
  • 마이크로소프트 빌드 2020 컨퍼런스에서 Win32UWP로 파편화된 윈도우 앱 개발 플랫폼을 통합하는 프로젝트 리유니온이 공개되었다.

6. 관련 문서

[1] 3 버전은 건너뛰었다.[2] 3 버전은 건너뛰었다.[3] 3 버전은 건너뛰었다.[4] 3 버전은 건너뛰었다.[5] C#의 경우 csc라는 이름의 컴파일러가 있다. 따라서 굳이 비주얼 스튜디오를 거치지 않아도 컴파일이 가능하긴 하다.[6] .NET Core 애플리케이션은 .dll 파일을 출력한다.[7] 출처는 MSDN 및 위키피디아[8] 이 버전은 .NET Framework 의 핵심 기능은 변경되지 않았다.[9] Windows Presentation Foundation[10] Windows Communication Foundation[11] Windows Workflow Foundation[12] Using Cardspace in Windows Communication Foundation[13] 이 버전은 .NET Framework 의 핵심 기능은 변경되지 않았다.[14] Windows Presentation Foundation[15] Windows Communication Foundation[16] Windows Workflow Foundation[17] Using Cardspace in Windows Communication Foundation[18] C# 3.0 및 Visual Basic .NET 등[19] C# 3.0 및 Visual Basic .NET 등[20] System.Numerics.BigInteger[21] System.Numerics.Complex[22] System.Numerics.BigInteger[23] System.Numerics.Complex[24] 출처[25] .NET Core 1.x만 지원[26] .NET Core 1.x만 지원[27] Nt 헤더 > 옵셔널 헤더 > 데이터 디렉토리스 멤버 중에 맨 마지막 부분에 닷넷 메타데이터 위치랑 크기가 있다. 이때 PE(Portable Executable)가 변조가 되면 그 위치가 바뀌거나 원래의 프로그램 EP(Entry Point)가 바뀌게 되어 실행이 불가능하다.[28] Process.MainModule 등[29] 컴파일로 나온 IL 코드를 어셈블리어로 번역시키는데, 그렇게 번역 과정을 마쳐서 나온 ASM 파일의 크기가 MB 단위로 나온다.[30] Nt 헤더 > 옵셔널 헤더 > 데이터 디렉토리스 멤버 중에 맨 마지막 부분에 닷넷 메타데이터 위치랑 크기가 있다. 이때 PE(Portable Executable)가 변조가 되면 그 위치가 바뀌거나 원래의 프로그램 EP(Entry Point)가 바뀌게 되어 실행이 불가능하다.[31] Process.MainModule 등[32] 컴파일로 나온 IL 코드를 어셈블리어로 번역시키는데, 그렇게 번역 과정을 마쳐서 나온 ASM 파일의 크기가 MB 단위로 나온다.