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

... 46  47  48  49  50  51  52  53  54  55  56  [57]  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12208정성태4/12/20209970Linux: 29. 리눅스 환경에서 C/C++ 프로그램이 Segmentation fault 에러가 발생한 경우
12207정성태4/2/20208954스크립트: 19. Windows PowerShell의 NonInteractive 모드
12206정성태4/2/202011253오류 유형: 613. 파일 잠금이 바로 안 풀린다면? - The process cannot access the file '...' because it is being used by another process.
12205정성태4/2/20208642스크립트: 18. Powershell에서는 cmd.exe의 명령어를 지원하진 않습니다.
12204정성태4/1/20208458스크립트: 17. Powershell 명령어에 ';' (semi-colon) 문자가 포함된 경우
12203정성태3/18/202010485오류 유형: 612. warning: 'C:\ProgramData/Git/config' has a dubious owner: '...'.
12202정성태3/18/202013111개발 환경 구성: 486. .NET Framework 프로젝트를 위한 GitLab CI/CD Runner 구성
12201정성태3/18/202010912오류 유형: 611. git-credential-manager.exe: Using credentials for username "Personal Access Token". [1]
12200정성태3/18/202011332VS.NET IDE: 145. NuGet + Github 라이브러리 디버깅 관련 옵션 3가지 - "Enable Just My Code" / "Enable Source Link support" / "Suppress JIT optimization on module load (Managed only)"
12199정성태3/17/20209182오류 유형: 610. C# - CodeDomProvider 사용 시 Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path '...\f2_6uod0.tmp'.
12198정성태3/17/202011931오류 유형: 609. SQL 서버 접속 시 "Cannot open user default database. Login failed."
12197정성태3/17/202011078VS.NET IDE: 144. .NET Core 콘솔 응용 프로그램을 배포(publish) 시 docker image 자동 생성 - 두 번째 이야기 [1]
12196정성태3/17/20208998오류 유형: 608. The ServicedComponent being invoked is not correctly configured (Use regsvcs to re-register).
12195정성태3/16/202010716.NET Framework: 902. C# - 프로세스의 모든 핸들을 열람 - 세 번째 이야기
12194정성태3/16/202013033오류 유형: 607. PostgreSQL - Npgsql.NpgsqlException: sorry, too many clients already
12193정성태3/16/20209723개발 환경 구성: 485. docker - SAP Adaptive Server Enterprise 컨테이너 실행 [1]
12192정성태3/14/202012173개발 환경 구성: 484. docker - Sybase Anywhere 16 컨테이너 실행
12191정성태3/14/202012535개발 환경 구성: 483. docker - OracleXE 컨테이너 실행 [1]
12190정성태3/14/20208647오류 유형: 606. Docker Desktop 업그레이드 시 "The process cannot access the file 'C:\Program Files\Docker\Docker\resources\dockerd.exe' because it is being used by another process."
12189정성태3/13/202013492개발 환경 구성: 482. Facebook OAuth 처리 시 상태 정보 전달 방법과 "유효한 OAuth 리디렉션 URI" 설정 규칙
12188정성태3/13/202015803Windows: 169. 부팅 시점에 실행되는 chkdsk 결과를 확인하는 방법
12187정성태3/12/20208469오류 유형: 605. NtpClient was unable to set a manual peer to use as a time source because of duplicate error on '...'.
12186정성태3/12/20209563오류 유형: 604. The SysVol Permissions for one or more GPOs on this domain controller and not in sync with the permissions for the GPOs on the Baseline domain controller.
12185정성태3/11/202010242오류 유형: 603. The browser service was unable to retrieve a list of servers from the browser master...
12184정성태3/11/202011646오류 유형: 602. Automatic certificate enrollment for local system failed (0x800706ba) The RPC server is unavailable. [3]
12183정성태3/11/202010012오류 유형: 601. Warning: DsGetDcName returned information for \\[...], when we were trying to reach [...].
... 46  47  48  49  50  51  52  53  54  55  56  [57]  58  59  60  ...