Microsoft MVP성태의 닷넷 이야기
.NET Framework: 599. .NET Core/SDK 설치 및 기본 사용법 [링크 복사], [링크+제목 복사],
조회: 24633
글쓴 사람
정성태 (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
정성태

... 61  62  63  64  65  [66]  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
11996정성태7/25/201915846.NET Framework: 849. C# - Socket의 TIME_WAIT 상태를 없애는 방법파일 다운로드1
11995정성태7/23/201918932.NET Framework: 848. C# - smtp.daum.net 서비스(Implicit SSL)를 이용해 메일 보내는 방법 [2]
11994정성태7/22/201914425개발 환경 구성: 454. Azure 가상 머신(VM)에서 SMTP 메일 전송하는 방법파일 다운로드1
11993정성태7/22/20199881오류 유형: 561. Dism.exe 수행 시 "Error: 2 - The system cannot find the file specified." 오류 발생
11992정성태7/22/201911664오류 유형: 560. 서비스 관리자 실행 시 "Windows was unable to open service control manager database on [...]. Error 5: Access is denied." 오류 발생
11991정성태7/18/20199178디버깅 기술: 128. windbg - x64 환경에서 닷넷 예외가 발생한 경우 인자를 확인할 수 없었던 사례
11990정성태7/18/201911378오류 유형: 559. Settings / Update & Security 화면 진입 시 프로그램 종료
11989정성태7/18/201910285Windows: 162. Windows Server 2019 빌드 17763부터 Alt + F4 입력시 곧바로 로그아웃하는 현상
11988정성태7/18/201911737개발 환경 구성: 453. 마이크로소프트가 지정한 모든 Root 인증서를 설치하는 방법
11987정성태7/17/201916710오류 유형: 558. 윈도우 - KMODE_EXCEPTION_NOT_HANDLED 블루스크린(BSOD) 문제 [1]
11986정성태7/17/20199510오류 유형: 557. 드라이브 문자를 할당하지 않은 파티션을 탐색기에서 드라이브 문자와 함께 보여주는 문제
11985정성태7/17/20199633개발 환경 구성: 452. msbuild - csproj에 환경 변수 조건 사용 [1]
11984정성태7/9/201917835개발 환경 구성: 451. Microsoft Edge (Chromium)을 대상으로 한 Selenium WebDriver 사용법 [1]
11983정성태7/8/20198894오류 유형: 556. nodemon - 'mocha' is not recognized as an internal or external command, operable program or batch file.
11982정성태7/8/20198893오류 유형: 555. Visual Studio 빌드 오류 - result: unexpected exception occured (-1002 - 0xfffffc16)
11981정성태7/7/201911075Math: 64. C# - 3층 구조의 신경망(분류)파일 다운로드1
11980정성태7/7/201921514개발 환경 구성: 450. Visual Studio Code의 Java 확장을 이용한 간단한 프로젝트 구축파일 다운로드1
11979정성태7/7/201911047개발 환경 구성: 449. TFS에서 gitlab/github등의 git 서버로 마이그레이션하는 방법
11978정성태7/6/201910400Windows: 161. 계정 정보가 동일하지 않은 PC 간의 인증을 수행하는 방법 [1]
11977정성태7/6/201914958오류 유형: 554. git push - error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large
11976정성태7/4/20199321오류 유형: 553. (잘못 인증 한 후) 원격 git repo 재인증 시 "remote: HTTP Basic: Access denied" 오류 발생
11975정성태7/4/201917828개발 환경 구성: 448. Visual Studio Code에서 콘솔 응용 프로그램 개발 시 "입력"받는 방법
11974정성태7/4/201913185Linux: 22. "Visual Studio Code + Remote Development"로 윈도우 환경에서 리눅스(CentOS 7) C/C++ 개발
11973정성태7/4/201912399Linux: 21. 리눅스에서 공유 라이브러리가 로드되지 않는다면?
11972정성태7/3/201915273.NET Framework: 847. JAVA와 .NET 간의 AES 암호화 연동 [1]파일 다운로드1
11971정성태7/3/201912410개발 환경 구성: 447. Visual Studio Code에서 OpenCvSharp 개발 환경 구성
... 61  62  63  64  65  [66]  67  68  69  70  71  72  73  74  75  ...