.NET CLI로 프로젝트 생성하기

.NET CLI 도구로 C# 프로젝트 빌드 및 실행하기

지난 수업에서 다룬 HelloWorld 폴더의 상위 디렉터리인 C:\csdemo 경로로 돌아갑니다.

새 폴더를 생성합니다. 명령어는 mkdir HelloWorld2 이고 마우스 우클릭으로 새 폴더를 직접 만들 수도 있습니다.

그 다음 명령 프롬프트에서 cd HelloWorld2 명령을 입력해 해당 폴더로 이동합니다

아래 명령을 실행해 완전히 새 콘솔 앱을 생성합니다. console는 .NET CLI에 내장된 앱 생성용 템플릿 이름입니다:

dotnet new consoleCode language: JavaScript (javascript)
C:\csdemo>mkdir HelloWorld

C:\csdemo>cd HelloWorld

C:\csdemo\HelloWorld>cd ..

C:\csdemo>mkdir HelloWorld2

C:\csdemo>cd HelloWorld2

C:\csdemo\HelloWorld2>dotnet new console
템플릿 "콘솔 앱"을 성공적으로 만들었습니다.

생성 후 작업 처리 중...
C:\csdemo\HelloWorld2\HelloWorld2.csproj 복원 중:
복원이 완료되었습니다.Code language: JavaScript (javascript)

참고:.NET CLI에는 여러 종류의 프로젝트 템플릿이 제공되며 ASP.NET 웹사이트, Windows Forms 그래픽 데스크톱 프로그램 등 다양한 유형의 프로젝트를 생성할 수 있습니다.

프로젝트 생성이 끝나고 폴더를 열면 아래 파일들을 확인할 수 있습니다

터미널에서 dir 명령을 실행하면 폴더 내 모든 파일 목록을 확인할 수 있습니다

디렉터리 안에 파일 세 개와 폴더 한 개가 새로 생긴 것을 볼 수 있습니다

  1. 프로젝트 파일:HelloWorld2.csproj
  2. C# 소스 코드 파일:Program.cs
  3. 폴더:obj (컴파일 설정, 캐시 등 .NET 빌드 및 실행에 필요한 데이터 저장)

메모장으로 HelloWorld2.csproj 파일을 엽니다

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net10.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

</Project>Code language: HTML, XML (xml)

제 컴퓨터에 .NET 10이 설치되어 있기 때문에 새로 만드는 프로젝트는 기본적으로 net10.0 프레임워크를 사용합니다

Program.cs 파일을 열면 기본 기본 코드가 적혀있습니다

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");Code language: JavaScript (javascript)

프로그램을 컴파일하고 실행하려면 아래 명령을 입력합니다

dotnet run

실행에 성공하면 콘솔에 텍스트가 출력됩니다:Hello World!

프로그래밍 기초 지식이 있는 독자라면 궁금할 수 있습니다. 프로그램 진입점이 Main 함수라고 들었는데 왜 여기서는 보이지 않을까요?

이것은 .NET의 새로운 기능인 최상위 문장(Main 없음)으로, 최신 C# 문법 설탕입니다. 간단한 코드 작성 환경에서 컴파일러가 자동으로 숨겨진 Main 진입점을 생성해 반복적인 템플릿 코드를 줄여줍니다

위 코드의 완전한 작성 형식은 아래와 같습니다:

using System;

namespace HelloWorld2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}Code language: JavaScript (javascript)

dotnet run 명령을 다시 실행합니다

코드는 정상적으로 컴파일되고 실행됩니다.

<Project Sdk="Microsoft.NET.Sdk">:새로운 스타일의 .NET SDK 프로젝트 형식을 사용한다고 선언

<OutputType>Exe</OutputType>:프로젝트 컴파일 결과물이실행 파일임을 지정 (콘솔 앱 필수 설정)

<TargetFramework>net10.0</TargetFramework>:프로젝트가 .NET 10.0 프레임워크 기반으로 실행되도록 설정

// 시스템 기본 네임스페이스 System을 불러옴, Console 클래스는 System 내에 존재
using System;

// 프로젝트 전용 네임스페이스 HelloWorld2 정의, 여러 프로젝트/클래스 간 이름 충돌 방지
namespace HelloWorld2
{
    // 프로그램 메인 클래스, .NET 콘솔 템플릿 기본 이름은 Program
    class Program
    {
        /// <summary>
        /// C# 프로그램 유일 진입 메서드, 앱 실행 시 자동 호출됨
        /// static:정적 메서드, Program 클래스를 인스턴스화하지 않고 바로 호출 가능
        /// void:반환값 없음, 프로그램 종료 후 운영체제에 데이터 전달 X
        /// string[] args:문자열 배열, 앱 실행 시 입력한 명령줄 인자를 받음
        /// </summary>
        static void Main(string[] args)
        {
            // Console.WriteLine():콘솔 출력 메서드
            // WriteLine은 텍스트 출력 후 자동 줄바꿈 수행
            // "Hello World!" 가 명령창에 인쇄할 문자열 내용
            Console.WriteLine("Hello World!");
        }
    }
}Code language: JavaScript (javascript)

맨 첫 줄 코드가 System 네임스페이스를 가져오기 때문에 내부 클래스를 코드에서 System 접두사 없이 쓸 수 있습니다. 가져오지 않았다면 전체 클래스명을 적어야 합니다.

위 호출 구문 Console.WriteLine에서 Console은 클래스명, WriteLine은 메서드명이며 위 이미지 오른쪽 상단 부분을 참고하세요.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다