Microsoft MVP성태의 닷넷 이야기
.NET Framework: 599. .NET Core/SDK 설치 및 기본 사용법 [링크 복사], [링크+제목 복사]
조회: 24235
글쓴 사람
정성태 (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)
12376정성태10/15/20208086오류 유형: 669. windbg - sos의 name2ee 명령어 실행 시 "Failed to request module list." 오류
12375정성태10/15/20209449Windows: 177. 윈도우 탐색기에서 띄우는 cmd.exe 창의 디렉터리 구분 문자가 'Yen(¥)' 기호로 나오는 경우 [1]
12374정성태10/14/202014020.NET Framework: 953. C# 9.0 - (6) 함수 포인터(Function pointers) [1]파일 다운로드2
12373정성태10/14/20209309.NET Framework: 952. OpCodes.Box와 관련해 IL 형식으로 직접 코딩 시 유의할 점
12372정성태10/13/202011271.NET Framework: 951. C# 9.0 - (5) 로컬 함수에 특성 지정 가능(Attributes on local functions)파일 다운로드1
12371정성태10/13/20209955개발 환경 구성: 519. Visual Studio의 Ctrl+Shift+U (Edit.MakeUppercase) 단축키가 동작하지 않는 경우
12370정성태10/13/202010811Linux: 33. Linux - nmcli를 이용한 고정 IP 설정
12369정성태10/12/202013625Windows: 176. Raymond Chen이 한글날에 밝히는 윈도우의 한글 자모 분리 현상 [3]
12368정성태10/12/20209648오류 유형: 668. VSIX 확장 빌드 - The "GetDeploymentPathFromVsixManifest" task failed unexpectedly.
12367정성태10/12/202022399오류 유형: 667. Ubuntu - Temporary failure resolving 'kr.archive.ubuntu.com' [2]
12366정성태10/12/202011460.NET Framework: 950. C# 9.0 - (4) 원시 크기 정수(Native ints) [1]파일 다운로드1
12365정성태10/12/202010442.NET Framework: 949. C# 9.0 - (3) 람다 메서드의 매개 변수 무시(Lambda discard parameters)파일 다운로드1
12364정성태10/11/202011640.NET Framework: 948. C# 9.0 - (2) localsinit 플래그 내보내기 무시(Suppress emitting localsinit flag)파일 다운로드1
12363정성태10/11/202012544.NET Framework: 947. C# 9.0 - (1) 대상으로 형식화된 new 식(Target-typed new expressions) [2]파일 다운로드1
12362정성태10/11/20209298VS.NET IDE: 151. Visual Studio 2019에 .NET 5 rc/preview 적용하는 방법
12361정성태10/11/202010905.NET Framework: 946. C# 9.0을 위한 개발 환경 구성
12360정성태10/8/20208134오류 유형: 666. The type or namespace name '...' does not exist in the namespace 'Microsoft.VisualStudio.TestTools' (are you missing an assembly reference?)
12359정성태10/7/20209645오류 유형: 665. Windows - 재부팅 후 iSCSI 연결이 끊기는 문제
12358정성태10/7/20209637오류 유형: 664. Web Deploy 설치 시 "A newer version of Microsoft Web Deploy 3.6 was found on this machine." 오류 [3]
12357정성태10/7/20207746오류 유형: 663. 이벤트 로그 - The storage optimizer couldn't complete retrim on New Volume
12356정성태10/7/202022397오류 유형: 662. ASP.NET Core와 500.19, 500.21 오류 (0x8007000d)
12355정성태10/3/20207824오류 유형: 661. Hyper-V Linux VM의 Internal 유형의 가상 Switch에 대한 IP 연결이 되지 않는 경우
12354정성태10/2/202020656오류 유형: 660. Web Deploy (msdeploy.axd) 실행 시 오류 기록 [1]
12353정성태10/2/202010450개발 환경 구성: 518. 비주얼 스튜디오에서 IIS 웹 서버로 "Web Deploy"를 이용해 배포하는 방법
12352정성태10/2/202010954개발 환경 구성: 517. Hyper-V Internal 네트워크에 NAT을 이용한 인터넷 연결 제공
12351정성태10/2/202010457오류 유형: 659. Nox 실행이 안 되는 경우 - Unable to bind to the underlying transport for ...
... 46  47  48  49  [50]  51  52  53  54  55  56  57  58  59  60  ...