[include(틀:마이크로소프트)] [[https://www.microsoft.com/net/|공식 사이트]] [목차] == 개요 == [[마이크로소프트]]에서 개발한 [[Microsoft Windows|Windows]] 프로그램 개발 및 실행 환경([[프레임워크]]). MS가 공식 지원하는 [[오픈 소스]] [[크로스 플랫폼]] 버전으로 Mono 등이 존재한다. FCL('''F'''ramework '''C'''lass '''L'''ibrary, 프레임워크 클래스 라이브러리) 클래스는 .NET 프레임워크를 대상으로 하는 모든 언어가 사용할 수 있는 클래스들의 라이브러리이며, CLR('''C'''ommon '''L'''anguage '''R'''untime, 공용 언어 런타임) 클래스는 공통 언어 런타임 클래스로 알려져 있는데 이 클래스는 언어 외에도 보안, 메모리 관리, 기타 핸들링 역할을 제공하는 [[가상머신]]이기도 하다. 이 FCL과 CLR이 합쳐진 것이 .NET Framework이다. == 버전 == ||<-12> Microsoft .NET || ||||<:>{{{#!folding .NET Framework [ 펼치기 · 접기 ] ||<|2> 버전 ||<|2> CLR[br]버전 ||<|2> 출시 날짜 ||<|2> 이 버전과 같이 나온 [br] Visual Studio 버전 ||<-2> 설치된 Windows 버전 ||<|2> 지원하는 Windows || || 클라이언트 || 서버 || || 프리 베타 || - || 2000년 7월 11일 || - || - || - || - || || 1.0 베타 1 || - || 2000년 11월 || - || - || - || - || || 1.0 베타 2 || - || 2001년 6월 20일 || - || - || - || - || || 1.0 || 1.0 || 2002년 2월 13일 || .NET 2002 || - || - || [[Windows 98|98]] ~ [[Windows XP|XP]][br][[Windows 2000|2000 Server]] || || 1.1 || 1.1 || 2003년 4월 24일 || .NET 2003 || - || [[Windows Server 2003|2003]] || 98 ~ [[Windows Vista|Vista]][br]2000 Server ~ [[Windows Server 2008|2008]] || || 2.0 || 2.0 || 2005년 11월 7일 || 2005 || - || [[Windows Server 2003 R2|2003 R2]] || [[Windows 2000|2000]], XP[br]2000 Server ~ 2003 R2 || || 3.0 || 2.0 || 2006년 11월 6일 || - || Vista || 2008 || XP, Vista[br]2003 ~ 2008 || || 3.5 || 2.0 || 2007년 11월 19일 || 2008 || [[Windows 7|7]] || [[Windows Server 2008 R2|2008 R2]] || XP 이상의 모든 윈도우 || || 4.0 || 4.0[* 3 버전은 건너뛰었다.] || 2010년 4월 12일 || 2010 || - || - || XP ~ 7[br]2003 ~ 2008 R2 || || 4.5 || 4.0 || 2012년 8월 15일 || 2012 || [[Windows 8|8]] || [[Windows Server 2012|2012]] || Vista ~ 8[br]2008 ~ 2012 || || 4.5.1 || 4.0 || 2013년 10월 17일 || 2013 || [[Windows 8.1|8.1]] || [[Windows Server 2012 R2|2012 R2]] || Vista ~ 8.1[br]2008 ~ 2012 R2 || || 4.5.2 || 4.0 || 2014년 5월 5일 || - || - || - || Vista ~ 8.1[br]2008 ~ 2012 R2 || || 4.6 || 4.0 || 2015년 7월 20일 || 2015 || [[Windows 10/버전/Threshold 1|10 v1507]] || - || Vista ~ [[Windows 10|10]][br]2008 ~ 2012 R2 || || 4.6.1 || 4.0 || 2015년 11월 12일 || 2015 업데이트 1 || [[Windows 10/버전/Threshold 2|10 v1511]] || - || 7 ~ 10[br]2008 R2 ~ 2012 R2 || || 4.6.2 || 4.0 || 2016년 8월 2일 || 2017 v15.0 || [[Windows 10/버전/Redstone 1|10 v1607]] || 2016 TP5[br](빌드넘버 14300) || 7 ~ 10[br]2008 R2 ~ 2012 R2 || || 4.7 || 4.0 || 2017년 4월 5일 || 2017 v15.1 || [[Windows 10/버전/Redstone 2|10 v1703]] || - || 7 ~ 10[br]2008 R2 ~ [[Windows Server 2016|2016]] || || 4.7.1 || 4.0 || 2017년 10월 17일 || 2017 v15.5 || [[Windows 10/버전/Redstone 3|10 v1709]] || 2016 v1709 || 7 ~ 10[br]2008 R2 ~ 2016 v1709 || || 4.7.2 || 4.0 || 2018년 4월 30일 || 2017 v15.8 || [[Windows 10/버전/Redstone 4|10 v1803]] || 2019[br](빌드넘버 17666) || 7 ~ 10[br]2008 R2 ~ [[Windows Server 2019|2019]] || || 4.8 || 4.0 || 2019년 4월 18일 || 2019 v16.0 || [[Windows 10/버전/19H1|10 v1903]] || - || 7 ~ 10[br]2008 R2 ~ 2019 || }}}|| ||||<:>{{{#!folding .NET Core 제품군 [ 펼치기 · 접기 ] || 버전 || 출시일 || 지원 종료일 || || 1.0 || 2016년 06월 27일 ||<|2> 2019년 06월 27일 || || 1.1 || 2016년 11월 16일 || || 2.0 || 2017년 08월 14일 || 2018년 10월 01일 || || 2.1 || 2018년 05월 30일 || 2021년 08월 21일 || || 2.2 || 2018년 12월 04일 || 2019년 12월 23일 || || 3.0 || 2019년 09월 23일 || 2020년 03월 03일 || || 3.1 || 2019년 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일 || === 5.x === .NET 5.0은 마이크로소프트가 빌드 2019 컨퍼런스에서 처음 발표하고 2020년 11월에 출시한 버전이다. 새로운 .NET 5는 .NET Core, [[Xamarin]] 등이 하나로 합쳐진 버전으로 여러 운영체제 프로그램 개발이 가능하다. 하지만 .NET Framework는 더이상 릴리즈 되지 않으며 .NET Core는 .NET Framework의 새로운 크로스 플렛폼 버전이므로 .NET 5와 .NET Framework는 출발 지점이 다르다고 볼 수 있다. [[https://dotnet.microsoft.com/download/dotnet/5.0|다운로드]] == [anchor(Framework)].NET Framework == === CIL === .NET 프레임워크를 사용하는 언어들로 작성된 소스 코드는 각 언어에 맞는 [[컴파일러]][* C#의 경우 csc라는 이름의 컴파일러가 있다. 따라서 굳이 [[비주얼 스튜디오]]를 거치지 않아도 컴파일이 가능하긴 하다.]를 거쳐 .NET CLR용 중간 코드인 CIL(Common Intermediate Language)로 컴파일된 후 .exe 파일로 래핑(wrapping)된다.[* .NET Core 애플리케이션은 .dll 파일을 출력한다.] 그리고 .NET CLR은 이 파일을 JIT 컴파일 방식으로 읽어들여 [[기계어]] 번역을 수행한다. CIL은 .NET CLR이 설치된 곳이라면 어디서든 컴파일이 가능하다. 예로 들어서 Hello World를 출력하는 C# 코드가 {{{#!syntax csharp 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 } }|| 이렇게 된다. === 주요 지원 언어 === * [[C\#]] - 닷넷의, 닷넷에 의한, 닷넷을 위한 언어. * [[Visual Basic .NET]] - C#보다 단순하지만, 기능은 똑같아 .NET Framework 입문에 적절하다. * [[C++]] * DLR - 동적 언어 런타임(Dynamic Language Runtime)으로 CLR에서 [[Python]], [[Ruby]] 등의 동적 언어들을 돌리기 위한 프레임워크이다. IronPython과 IronRuby 등 타 언어를 C#과 같이 쓸 수 있다. * [[F\#]] - GPU 연산 등을 자체지원하는 연산에 특화된 언어이다 * Delphi.NET === 버전별 변경사항[* 출처는 MSDN 및 위키피디아] === * 표시가 된 항목은 출시 예정이다. || 버전 || 변경사항 || || 1.0 ||닷넷 프레임워크 첫 버전으로서, 핵심 구성 요소 및 기본 프로그래밍 언어를 처음으로 완성한 버전 || || 1.1 ||ASP.NET 기능 강화 및 오라클 데이터베이스, ODBC, OLE DB 지원 || || 2.0 ||제네릭 프로그래밍을 위한 제네릭 도입, ADO/ASP.net 에 새로운 프로그래밍 기술 추가, AMD64 프로세서 용 버전 출시 || || 3.0[* 이 버전은 .NET Framework 의 핵심 기능은 변경되지 않았다.] ||4개의 주요 기능: 윈도우 프레젠테이션 파운데이션[* Windows Presentation Foundation], 윈도우 커뮤니케이션 파운데이션[* Windows Communication Foundation], 윈도우 워크플로 파운데이션[* Windows Workflow Foundation], 윈도우 카드스페이스[* Using Cardspace in Windows Communication Foundation] 추가. || || 3.5 ||기존 언어들[* C# 3.0 및 Visual Basic .NET 등]에 대한 지원과 새로운 기능이 대거 추가. 서비스 팩 1에서는 여러가지 기능들이 더 추가 및 확장 || || 4.0 ||병렬 처리를 위한 Parallel Extension, Parallel Linq 기능 추가, C# 4.0에 다이나믹 타입, 임의 정밀도 정수[* System.Numerics.BigInteger] 타입, 복소수[* System.Numerics.Complex] 타입 추가. || || 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의 모든 컨트롤을 호스팅하는 것이 가능. || == [anchor(Core)].NET Core == .NET Core는 윈도우 외의 운영체제가 닷넷을 사용할 수 있도록 하는 프로젝트. 라이선스는 [[MIT 허가서|MIT 라이선스]] 및 [[아파치 라이선스]][* [[https://github.com/dotnet/core/blob/master/LICENSE.TXT|출처]]]이다. 프로페셔널하고 편리한 [[C\#]], 배우기 쉽고 간단하지만 강력한 [[Visual Basic.NET]], 연산에 특화된 [[F##]], 이 세가지 언어로, [[리눅스]], [[맥OS]]를 개발 할 수 있다는 소리. 그리고 웹 애플리케이션 개발용으로 [[ASP|ASP.NET Core]]를 사용 할 수 있다. 또한 [[.NET Standard]]를 통해 [[#Framework|.NET Framework]], [[Xamarin]], [[MonoDevelop|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를 지원한다. === 지원 언어 === * [[C\#]] * [[Visual Basic]] * [[F\#]] === 요구 사항 === 2.0 이상 기준 ==== [[Windows]] ==== * [[Windows 7]] SP1 * [[Windows 8.1]] * [[Windows 10]] [[Windows 10/버전/Redstone 1|1607]] 이후 * [[Windows Server 2008]] R2 SP1 (전체 서버 또는 Server Core) * [[Windows Server 2012]] SP1 (전체 서버 또는 Server Core) * [[Windows Server 2012]] R2 (전체 서버 또는 Server Core) * [[Windows Server 2016]] 이상 버전 (전체 서버, Server Core 또는 Nano Server) ==== [[macOS]] ==== * [[macOS]] [[macOS/버전#s-15|10.11 엘 카피탄]][* .NET Core 1.x만 지원] * [[macOS]] [[macOS/버전#s-16|10.12 시에라]] ==== [[리눅스]] ==== * [[레드햇 엔터프라이즈 리눅스|Red Hat Enterprise]] Linux 7, 6 - 64비트 * [[CentOS|CentOS 7]] - 64비트 * Oracle Linux 7 - 64비트 * [[페도라(운영 체제)|Fedora 28]], 27 - 64비트 * [[데비안|Debian 9]](64비트, arm32), 8.7 이상 버전 - 64비트 * [[우분투|Ubuntu 18.04]](64비트, arm32), 16.04, 14.04, 64비트 * [[리눅스 민트|Linux Mint 18, 17]] - 64비트 * [[openSUSE|openSUSE 42.3]] 이상 버전 - 64비트 * [[openSUSE|SUSE Enterprise Linux(SLES) 12]] 서비스 팩 2 이상 - 64비트 * Alpine Linux 3.7 이상 버전 - 64비트 === 참고 === [[https://dotnet.microsoft.com/|닷넷 사이트]] [[https://docs.microsoft.com/ko-kr/dotnet/core/|닷넷 가이드]] [[https://dotnet.microsoft.com/download#core|닷넷 다운로드]] [[https://en.wikipedia.org/wiki/.NET_Core|영문 위키피디아]] == 기타 == *라이브러리의 소스코드가 공개되어 있으며, [[http://referencesource.microsoft.com|여기]]에서 확인할 수 있다. [[GitHub]]에도 있다.[[https://github.com/dotnet/windowsdesktop|#]] * .NET 기반 프로그램은 [[바이럿]]과 같은 파일 감염형 바이러스에 감염되면 '''아예 실행이 되지 않는다.'''[* Nt 헤더 > 옵셔널 헤더 > 데이터 디렉토리스 멤버 중에 맨 마지막 부분에 닷넷 메타데이터 위치랑 크기가 있다. 이때 PE(Portable Executable)가 변조가 되면 그 위치가 바뀌거나 원래의 프로그램 EP(Entry Point)가 바뀌게 되어 실행이 불가능하다.] * Any CPU 기능으로 프로그램이 운영체제 32, 64비트에 맞게 작동할 수 있다. 예로 들어서 64비트 환경에서 실행하면 64비트 프로세스로 실행되는 식이다. 다만 32/64 비트 C++ 라이브러리 호출(32 및 64비트 버전 돌다 없을 경우)이나 일부 코드[* Process.MainModule 등]는 사용 불가능해진다. * 하위호환이 되지 않기 때문에 여러 버전을 같이 설치해야 한다. 3.5 버전을 설치하면 2.0이나 3.0도 호환이 가능한데, 3.5를 설치할 때 2.0과 3.0도 같이 설치돼서 그런 것 뿐이다. 그래도 [[Windows 7]]부터는 3.5 SP1 버전이 기본 설치되며, [[Windows Update]]를 통한 자동 설치를 지원하기 때문에 부담이 덜하다. * 설치를 계속 실패하는 경우, 알려진 해결책을 써도 해결이 안 되는 경우가 있다. Windows를 새로 업데이트하고 난 후에 이 현상이 발생했다면 그래픽 드라이버를 깔아서 업데이트를 해보자. 소프트웨어를 처음 업그레이드 할 경우 그래픽 드라이버가 전부 삭제되거나 비활성화 되어있는 경우가 자주 있어서 이런 듯. * 프레임워크 설치나 사용 과정에서 낮은 버전과 상위 버전이 꼬이는 오류 등으로도 설치실패나 에러가 계속 날 수 있는데 [[https://support.microsoft.com/ko-kr/help/975963|마이크로소프트 링크]]를 참조하면 개별 버전을 직접 설치하는 것도 가능하다. 그래도 안 되는 경우라면 [[https://answers.microsoft.com/ko-kr/windows/forum/windows_7-update/net-framework-4%EC%9A%A9-%EB%B3%B4%EC%95%88/ea5cca5b-1892-40c7-9fbb-445c0749b3b0|마이크로소프트에서 제공하는 .NET Framework 클린 제거 도구]]를 사용하고 다시 설치하는 방법도 있다, * [[비주얼 스튜디오]]를 사용하지 않는다고 프로그램을 만들 수 없는 것은 아니다. .NET Framework는 설치 시 컴파일러도 같이 설치되므로 컴파일러만으로 프로그램을 만들 수 있다. * [[리눅스]], [[macOS]], [[iOS]], [[안드로이드(운영체제)|안드로이드]] 등 다른 플랫폼으로 포팅하려고 만들어진 오픈 소스판들이 존재한다. * Mono 프로젝트가 가장 유명하다. 프로젝트가 시작된 초기에는 [[리처드 스톨먼]] 등이 Mono는 잠재적으로 MS의 고소 위협에 시달릴 수 있으니 쓰지 말아야 한다고 주장하기도 했었다. 하지만 [[사티아 나델라]]가 MS의 CEO가 된 이후 오픈 소스 커뮤니티 끌어안기에 적극적으로 나서면서 MS가 세운 [[https://www.dotnetfoundation.org/|.NET Foundation]]과 MS가 인수한 [[Xamarin]]이 아예 Mono의 공식 개발 팀이 된 상태이다. 이로써 Mono 프로젝트는 법적 분쟁 가능성이 일소되었으면서 .NET과의 호환성도 확실히 보장되는 확실한 오픈 소스판이 되었다고 봐도 무방하다. * [[#Core|.NET Core]]라는 리눅스와 macOS에서 컴파일과 실행이 가능한 Mono와 별도의 오픈 소스 플랫폼이 존재한다. 하지만, 컴파일을 할 경우 결과물이 PE로 나온다. 이것도 .NET Foundation이 개발을 맡고 있고 Mono 최신판에 .NET Core가 이식되었다. * [[http://www.dotgnu.org/|DotGNU]]라는, 한때 [[GNU|GNU 프로젝트]]의 일부였으나 현재는 여기서 제외된 오픈 소스 프로젝트도 있다. * '''.NET으로 운영 체제를 만들 수도 있다!''' 현재 [[https://github.com/CosmosOS/Cosmos|Cosmos]]라는 C#이나 VB.NET 등으로 운영 체제를 만들 수 있는 오픈 소스 킷이 [[GitHub]]에 올라와 있다.[* 컴파일로 나온 IL 코드를 [[어셈블리어]]로 번역시키는데, 그렇게 번역 과정을 마쳐서 나온 ASM 파일의 크기가 MB 단위로 나온다.] * 마이크로소프트가 빌드 2019 컨퍼런스에서 2020년 11월 경에 출시될 예정인 5.0 버전에서 현재까지 출시된 .NET Framework와 .NET Core, Xamarin 등이 하나의 플랫폼으로 합쳐질 것이라고 예고했다.[[https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/|#]] 정확히는 .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 컨퍼런스에서 [[Win32]]와 [[UWP]]로 파편화된 윈도우 앱 개발 플랫폼을 통합하는 [[https://github.com/microsoft/ProjectReunion|프로젝트 리유니온]]이 공개되었다. == 관련 문서 == * [[.NET Standard]] * [[MonoDevelop]] * [[https://docs.microsoft.com/ko-kr/dotnet/framework/get-started/system-requirements|.NET Framework 시스템 요구 사항]] [[분류:Microsoft]][[분류:프로그래밍 언어]] [include(틀:문서 가져옴, this=문단, title=.NET Core, version=34)]