Microsoft MVP성태의 닷넷 이야기
.NET Framework: 599. .NET Core/SDK 설치 및 기본 사용법 [링크 복사], [링크+제목 복사]
조회: 24242
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 1개 있습니다.)

.NET Core/SDK 설치 및 기본 사용법

아래의 글을 잠깐 읽고 내용을 좀 보태서 써봤습니다.

Exploring dotnet new with .NET Core
; http://www.hanselman.com/blog/ExploringDotnetNewWithNETCore.aspx

우선, .NET Core의 CLI 부분이 오픈 소스인 것은 아실테고.

dotnet/cli 
; https://github.com/dotnet/cli

.NET Framework Full 버전을 비롯해서 .NET Core의 각종 포팅 버전들을 다음의 경로에서 다운로드 할 수 있습니다.

.NET Downloads
; https://dotnet.microsoft.com/download

개발자라면 SDK 버전을 다운로드 받으시고,

.NET Core SDK Installer - x64
; https://dotnet.microsoft.com/download

그 응용 프로그램을 배포할 대상 컴퓨터에는 그냥 런타임만 설치하시면 됩니다.

.NET Core Installer - x64
; https://dotnet.microsoft.com/download

자바랑 비교하자면, JDK == ".NET Core SDK"이고 JRE == ".NET Core"라고 보시면 됩니다.

설치를 하고 나면, %PROGRAMFILES% 하위에 "dotnet"이라는 폴더가 생성되고 다음과 같은 구조로 설치가 됩니다.

C:\Program Files\dotnet
                       \host  
                            \fxr
                                \1.0.1\hostfxr.dll
                       \shared
                            \Microsoft.NETCore.App
                                \1.0.0\(.NET CLR 호스팅 DLL, BCL 어셈블리 및 Windows DLL...)
                       \swidtag

                       \sdk (SDK 버전에서만!)
                           \1.0.0-preview1-002702
                           \1.0.0-preview2-003121\(.NET 어셈블리들 - NuGet, System.,,,)

".NET Core SDK" 설치와 ".NET Core" 설치의 차이점은 "\sdk" 폴더 밖에 없습니다.

그 외에, 두 설치 파일 모두 System 환경 변수에 "C:\Program Files\dotnet\" 폴더를 PATH에 추가시키는 정도만 있을 뿐 기타 시스템 변경 사항은 없습니다.




자, 그럼 환경 변수도 설정되어 있으니 명령행 창을 띄우고 dotnet.exe를 실행해 볼까요? 우선 "new" 옵션부터 보겠습니다.

C:\temp\dot_test>dotnet new

Welcome to .NET Core!
---------------------
Learn more about .NET Core @ https://aka.ms/dotnet-docs. Use dotnet --help to see available commands or go to https://aka.ms/dotnet-cli-docs.
Telemetry
--------------
The .NET Core tools collect usage data in order to improve your experience. The data is anonymous and does not include commandline arguments. The data is collected by Microsoft and shared with the community.
You can opt out of telemetry by setting a DOTNET_CLI_TELEMETRY_OPTOUT environment variable to 1 using your favorite shell.
You can read more about .NET Core tools telemetry @ https://aka.ms/dotnet-cli-telemetry.
Configuring...
-------------------
A command is running to initially populate your local package cache, to improve restore speed and enable offline access. This command will take up to a minute to complete and will only happen once.
Decompressing 100% 2168 ms
Expanding 100% 7518 ms
Created new C# project in C:\temp\dot_test.

최초 한번 new 옵션으로 실행하면 저렇게 "telemetry" 옵션을 켜는 것으로 시작합니다. 뭔가 싶었는데, "Windows Experience Improvement Program"과 유사한 것입니다. 익명으로 수집된다는 데 원치 않는다면 DOTNET_CLI_TELEMETRY_OPTOUT 환경 변수를 1로 설정하시면 됩니다. (최초 한번 실행 때만 이렇게 알려줍니다.)

중요한 것은 c:\temp\dot_test 폴더에 C# 프로젝트를 생성했다는 것입니다. 뭐 대단한 것은 아니고 다음의 2개 파일 정도만 생성될 뿐입니다.

  • Program.cs
  • project.json

Program.cs는 간단한 소스 파일이고

using System;

namespace ConsoleApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

project.json은 일반적인 .csproj처럼 C# 프로젝트 파일이라고 보시면 됩니다. 대충 다음과 같은 내용을 담습니다.

{
  "version": "1.0.0-*",
  "buildOptions": {
    "debugType": "portable",
    "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.0": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.0.0"
        }
      },
      "imports": "dnxcore50"
    }
  }
}

빌드는 "build" 옵션으로 가능하지만,

C:\temp\dot_test>dotnet build
Project dot_test does not have a lock file. Please run "dotnet restore" to generate a new lock file.
Project dot_test does not have a lock file. Please run "dotnet restore" to generate a new lock file.

오류 메시지에서 보는 것처럼, "dotnet new" 후에 최초 한번은 저렇게 "dotnet restore"를 해줘야 합니다.

C:\temp\dot_test>dotnet restore
log  : Restoring packages for C:\temp\dot_test\project.json...
log  : Writing lock file to disk. Path: C:\temp\dot_test\project.lock.json
log  : C:\temp\dot_test\project.json
log  : Restore completed in 929ms.

C:\temp\dot_test>dotnet build
Project dot_test (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling dot_test for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:01.0198682

"dotnet restore" 실행 출력문을 보면, restore 명령은 proejct.lock.json을 만들어 주는 거 이외에도 project.json에 포함된 종속 관계의 패키지들을 설치해주는 역할을 합니다. 따라서, 종속성이 있어도 project.json에 잘 명시만 되어 있으면 "restore" 명령으로 인해 다른 개발자 PC에서도 쉽게 종속 패키지들이 자동으로 준비가 됩니다.

.NET Core SDK가 설치된 경우 "dotnet run" 명령도 가능한데, 이것은 빌드가 되어 있지 않으면 빌드까지 자동으로 한 후 실행을 합니다.

C:\temp\dot_test>dotnet run
Project dot_test (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling dot_test for .NETCoreApp,Version=v1.0

Compilation succeeded.
    0 Warning(s)
    0 Error(s)

Time elapsed 00:00:00.8147279


Hello World!

그런데 "run" 옵션은 ".NET Core" 버전에서는 실행되지 않습니다. 만약 실행하면 다음과 같은 식의 오류 메시지를 볼 수 있습니다.

C:\temp\dot_test>dotnet run
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
  http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

그럼 ".NET Core" 버전에서는 실행을 어떻게 하냐고요? 그냥 "run" 없이 닷넷 어셈블리 파일을 지정해 주면 됩니다.

C:\temp\dot_test>dotnet c:\temp\dot_test\bin\release\netcoreapp1.0\dot_test.dll
Hello World!

그런데... 뭔가 이상하군요. 콘솔 응용 프로그램인데 왜 산출물이 dot_test.dll일까요? 그것은 .NET Core 응용 프로그램은 무조건 dotnet.exe가 진입점이기 때문에 실행 파일조차도 .dll로 된 것입니다. 마치 Java에서도 .exe가 아닌 .class나 .jar를 지정하는 것과 유사합니다.




그 외, 기타 자잘한 명령어로 다음의 것들이 있습니다.

  • dotnet new -t lib
  • dotnet new -t web
  • dotnet new -t xunittest

이름에서 유추할 수 있듯이, 첫번째는 "라이브러리 유형의 프로젝트"를 자동 생성해 주고, 두번째는 "ASP.NET Core 프로젝트", 세번째는 "XUnit 단위 테스트 프로젝트"를 생성합니다.

덤으로, 로드맵 링크 하나! ^^

MS, 닷넷코어 새 로드맵 공개
; http://www.zdnet.co.kr/news/news_view.asp?artice_id=20160718091844




참고로, "Visual Studio Code"의 환경 구성을 볼까요? 설치 후 C# 파일을 열면 다음과 같이 확장 도구를 권장하는 문구가 뜹니다.

net_core_first_1.png

여기서 "Show Recommendations"를 누르면 다음과 같이 "EXTENSION" 탭이 열리면서 어떤 확장 도구를 설치할지 묻습니다. 저는 그냥 "Microsoft"에서 제공하는 "C# 1.2.2" 확장을 선택했습니다.

net_core_first_2.png

그런 다음 Program.cs 파일이 담긴 폴더를 Visual Studio Code에서 "File" / "Open Folder..." 메뉴를 선택해 열면 됩니다. 인텔리센스도 지원되고 디버깅도 확장 도구 설치를 통해 이용할 수 있습니다. 물론, Visual Studio 버전과는 비교가 안되지만. ^^




마지막으로 ".NET Core" 버전이 지원하는 윈도우 운영체제 버전은 윈도우 7 이상입니다.

재미있는 것은, XP/2003 에서는 ".NET Core Installer" 런타임이 설치는 되지만 실행시 "C:\Program Files\dotnet\dotnet.exe is not a valid Win32 application" 오류 메시지 창과 함께 "Access is denied" 오류가 발생합니다.

C:\temp>dotnet
Access is denied.

Vista 역시 설치도 되고 dotnet.exe 단독 실행까지 되지만, 정작 닷넷 어셈블리를 실행하려면 필요한 Win32 API가 없다는 다음의 오류 메시지가 나옵니다.

The procedure entry point ResolveLocaleName could not be located in the dynamic link library KERNEL32.dll

이와 함께 명령행에는 0x8007007F 오류 코드가 나옵니다.

C:\temp>dotnet dot_test.dll
Failed to load the dll from [C:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.0.0\coreclr.dll], HRESULT: 0x8007007F
Failed to bind to CoreCLR at 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\1.0.0\coreclr.dll'




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 5/21/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2016-08-18 12시20분
정성태
2016-12-13 08시11분
[정환나라] dotnet core로 작성한 dll을 기존 .net Framework로 작성된 프로젝트에 참조하여 사용이 가능하던데 ILSpy 등으로 읽어오는데는 문제가 있더군요.
즉, 어느정도의 암호화가 적용되어 있다고 봐야 할까요?

그렇다면 암호화가 필요한 코드라던지 그런 부분은 .net core로 작성해서 참조하여 사용하는 방식도 괜찮지 않을까요?
[guest]
2016-12-14 02시13분
@정환나라 문제가 있다는 것이 어떤 정도인지는 모르겠지만 암호화가 적용되었을 것 같지는 않습니다. 혹시 .NET Reflector로도 해보셨나요? 사실 PE(Portable Executable) 파일 분석 같은 툴들도 개발자에 따라서 약간의 헤더 분석만 잘못해도 비정상 종료하는 것처럼, ILSpy 측의 DLL 분석에 약간의 오류가 있을 수도 있습니다.

암호화가 아마 안되었을 거라는 것은, 어차피 클라이언트에서 실행해야 하므로 복호화키도 담겨져 있어야 합니다. 그렇다면 어차피 분석되는 것은 마찬가지이기 때문에 딱히 실행 시 오버헤드를 감수하고 그런 것을 했을 것 같지는 않습니다.
정성태
2016-12-14 07시37분
[정환나라] 그렇긴 하겠네요. 답변 감사합닌다
[guest]
2017-04-05 12시15분
정성태
2017-04-05 12시44분
Deploying a self contained .Net core application on Linux and run as a daemon process
; http://cloudauthority.blogspot.kr/2017/01/deploying-self-contained-net-core.html
정성태

1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13331정성태4/27/20233885오류 유형: 856. dockerfile - 구 버전의 .NET Core 이미지 사용 시 apt update 오류
13330정성태4/26/20233529Windows: 247. Win32 C/C++ - CS_GLOBALCLASS 설명
13329정성태4/24/20233732Windows: 246. Win32 C/C++ - 직접 띄운 대화창 템플릿을 위한 Modal 메시지 루프 생성파일 다운로드1
13328정성태4/19/20233401VS.NET IDE: 184. Visual Studio - Fine Code Coverage에서 동작하지 않는 Fake/Shim 테스트
13327정성태4/19/20233808VS.NET IDE: 183. C# - .NET Core/5+ 환경에서 Fakes를 이용한 단위 테스트 방법
13326정성태4/18/20235231.NET Framework: 2109. C# - 닷넷 응용 프로그램에서 SQLite 사용 (System.Data.SQLite) [1]파일 다운로드1
13325정성태4/18/20234525스크립트: 48. 파이썬 - PostgreSQL의 with 문을 사용한 경우 연결 개체 누수
13324정성태4/17/20234356.NET Framework: 2108. C# - Octave의 "save -binary ..."로 생성한 바이너리 파일 분석파일 다운로드1
13323정성태4/16/20234287개발 환경 구성: 677. Octave에서 Excel read/write를 위한 io 패키지 설치
13322정성태4/15/20235063VS.NET IDE: 182. Visual Studio - 32비트로만 빌드된 ActiveX와 작업해야 한다면?
13321정성태4/14/20233890개발 환경 구성: 676. WSL/Linux Octave - Python 스크립트 연동
13320정성태4/13/20233870개발 환경 구성: 675. Windows Octave 8.1.0 - Python 스크립트 연동
13319정성태4/12/20234318개발 환경 구성: 674. WSL 2 환경에서 GNU Octave 설치
13318정성태4/11/20234150개발 환경 구성: 673. JetBrains IDE에서 "Squash Commits..." 메뉴가 비활성화된 경우
13317정성태4/11/20234237오류 유형: 855. WSL 2 Ubuntu 20.04 - error: cannot communicate with server: Post http://localhost/v2/snaps/...
13316정성태4/10/20233565오류 유형: 854. docker-compose 시 "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)" 오류 발생
13315정성태4/10/20233775Windows: 245. Win32 - 시간 만료를 갖는 컨텍스트 메뉴와 윈도우 메시지의 영역별 정의파일 다운로드1
13314정성태4/9/20233859개발 환경 구성: 672. DosBox를 이용한 Turbo C, Windows 3.1 설치
13313정성태4/9/20233937개발 환경 구성: 671. Hyper-V VM에 Turbo C 2.0 설치 [2]
13312정성태4/8/20233951Windows: 244. Win32 - 시간 만료를 갖는 MessageBox 대화창 구현 (개선된 버전)파일 다운로드1
13311정성태4/7/20234462C/C++: 163. Visual Studio 2022 - DirectShow 예제 컴파일(WAV Dest)
13310정성태4/6/20234060C/C++: 162. Visual Studio - /NODEFAULTLIB 옵션 설정 후 수동으로 추가해야 할 library
13309정성태4/5/20234228.NET Framework: 2107. .NET 6+ FileStream의 구조 변화
13308정성태4/4/20234122스크립트: 47. 파이썬의 time.time() 실숫값을 GoLang / C#에서 사용하는 방법
13307정성태4/4/20233886.NET Framework: 2106. C# - .NET Core/5+ 환경의 Windows Forms 응용 프로그램에서 HINSTANCE 구하는 방법
13306정성태4/3/20233675Windows: 243. Win32 - 윈도우(cbWndExtra) 및 윈도우 클래스(cbClsExtra) 저장소 사용 방법
1  2  3  4  5  6  7  8  9  10  11  [12]  13  14  15  ...