프로젝트 및 솔루션 소개

이 소개 문서에서는 Visual Studio에서 ‘솔루션’과 ‘프로젝트’를 만드는 것의 의미를 살펴봅니다. 솔루션은 클래스 라이브러리 프로젝트와 해당 테스트 프로젝트와 같은 하나 이상의 관련 코드 프로젝트를 구성하기 위한 컨테이너입니다.

프로젝트 개념을 이해하기 위한 교육용 연습으로 솔루션과 프로젝트를 처음부터 생성하겠습니다. 일반적으로 Visual Studio 프로젝트 ‘템플릿’을 사용하여 새 프로젝트를 만듭니다. 또한 프로젝트와 프로젝트에 포함될 수 있는 몇 가지 파일의 속성을 살펴보고 한 프로젝트에서 다른 프로젝트에 대한 참조를 만들겠습니다.

참고

Visual Studio에서 앱을 개발하는 데 솔루션과 프로젝트가 필요한 것은 아닙니다. 코드가 포함된 폴더를 열고 코딩, 빌드, 디버그를 시작해도 됩니다. 예를 들어 복제된 GitHub 리포지토리에 Visual Studio 프로젝트와 솔루션이 없을 수도 있습니다. 자세한 내용은 프로젝트 또는 솔루션 없이 Visual Studio에서 코드 개발을 참조하세요.

아직 Visual Studio 2019를 설치하지 않은 경우 Visual Studio 다운로드 페이지로 이동하여 체험용으로 설치합니다.

아직 Visual Studio를 설치하지 않은 경우 Visual Studio 다운로드 페이지로 이동하여 체험용으로 설치합니다.

솔루션 및 프로젝트

Visual Studio에서 솔루션은 “해결책”이 아닙니다. 솔루션은 Visual Studio에서 하나 이상의 관련 프로젝트를 구성하는 데 사용하는 컨테이너일 뿐입니다. 솔루션을 열면 Visual Studio에서 솔루션에 포함된 모든 프로젝트를 자동으로 로드합니다.

솔루션 만들기

빈 솔루션을 만들어 탐색을 시작합니다. Visual Studio에 대해 잘 알게 되면 빈 솔루션을 자주 만들지 않게 됩니다. 새 프로젝트를 만들 때 솔루션이 아직 열려 있지 않으면 Visual Studio에서 자동으로 프로젝트의 솔루션을 만듭니다.

  1. Visual Studio를 엽니다.

  2. 시작 창에서 새 프로젝트 만들기를 선택합니다.

  3. 새 프로젝트 만들기 페이지에서 검색 상자에 빈 솔루션을 입력하고 빈 솔루션 템플릿, 다음을 차례로 선택합니다.

    Screenshot that shows a Blank Solution template selected in Visual Studio 2019.

    여러 워크로드를 설치했다면 빈 솔루션 템플릿이 검색 결과 목록 상단에 표시되지 않을 수도 있습니다. 목록의 다른 검색 결과 섹션으로 스크롤해 보세요. 템플릿이 표시될 것입니다.

  4. 솔루션 이름을 QuickSolution으로 지정하고 만들기를 선택합니다.

    솔루션이 Visual Studio 창 오른쪽에 있는 솔루션 탐색기에 표시됩니다. 자주 솔루션 탐색기를 사용하여 프로젝트의 내용을 탐색할 수 있습니다.

  1. Visual Studio를 열고 시작 창에서 새 프로젝트 만들기를 선택합니다.

  2. 새 프로젝트 만들기 페이지의 검색 상자에 ‘빈 솔루션’을 입력하고 빈 솔루션 템플릿, 다음을 차례로 선택합니다.

    Screenshot that shows a Blank Solution template selected in Visual Studio.

    여러 워크로드를 설치했다면 빈 솔루션 템플릿이 검색 결과 목록 상단에 표시되지 않을 수도 있습니다. 검색을 기반으로 한 다른 결과를 스크롤하여 템플릿을 찾아보세요.

  3. 새 프로젝트 구성 페이지에서 솔루션 이름을 QuickSolution으로 지정하고 만들기를 선택합니다.

    Visual Studio 창 오른쪽에 있는 솔루션 탐색기QuickSolution 솔루션이 표시됩니다. 솔루션 탐색기를 자주 사용하여 프로젝트 내용을 살펴봅니다.

프로젝트 추가

이제 첫 번째 프로젝트를 솔루션에 추가합니다. 빈 프로젝트로 시작하여 필요한 항목을 추가합니다.

  1. 솔루션 탐색기에서 ‘QuickSolution’ 솔루션의 마우스 오른쪽 단추 클릭 또는 상황에 맞는 메뉴에서 추가>새 프로젝트를 선택합니다.

    새 프로젝트 추가라고 표시된 대화 상자가 열립니다.

  2. 상단의 검색 상자에 empty라는 텍스트를 입력한 다음 언어 아래에서 C#을 선택합니다.

  3. 빈 프로젝트(.NET Framework) 템플릿을 선택하고 다음을 선택합니다.

  4. 프로젝트 이름을 QuickDate로 지정한 다음, 만들기를 선택합니다.

    QuickDate라는 프로젝트는 솔루션 탐색기의 솔루션 아래에 표시됩니다. 현재 App.config라는 단일 파일이 포함됩니다.

    참고

    빈 프로젝트(.NET Framework) 템플릿이 표시되지 않는 경우 .NET 데스크톱 개발 Visual Studio 워크로드를 설치해야 합니다. Visual Studio에서는 워크로드 기반 설치를 사용하여 개발할 형식에 필요한 구성 요소만을 설치합니다.

    새 프로젝트를 만들 때 원하는 내용을 찾을 수 없습니까? 로 표시된 텍스트 아래에서 추가 도구 및 기능 설치 링크를 선택하면 새 워크로드를 간편히 설치할 수 있습니다. Visual Studio 설치 관리자가 실행되면 .NET 데스크톱 개발 워크로드를 선택한 다음, 수정 단추를 선택합니다.

    Screenshot that shows the Open Visual Studio Installer link.

  1. 솔루션 탐색기에서 ‘QuickSolution’ 솔루션을 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 추가>새 프로젝트를 선택합니다.

  2. 새 프로젝트 추가 페이지의 맨 위 검색 상자에 ‘빈’을 입력하고 모든 언어에서 C# 을 선택합니다.

  3. C# 빈 프로젝트(.NET Framework) 템플릿을 선택하고 다음을 선택합니다.

    참고

    Visual Studio에서는 워크로드 기반 설치를 사용하여 개발할 형식에 필요한 구성 요소만을 설치합니다. 빈 프로젝트(.NET Framework) 템플릿이 표시되지 않는 경우 .NET 데스크톱 개발 Visual Studio 워크로드를 설치해야 합니다.

    새 프로젝트를 만들 때 원하는 내용을 찾을 수 없습니까? 로 표시된 텍스트 아래에서 추가 도구 및 기능 설치 링크를 선택하면 새 워크로드를 간편히 설치할 수 있습니다. Visual Studio 설치 관리자에서 .NET 데스크톱 개발 워크로드를 선택한 다음, 수정을 선택합니다.

    Screenshot that shows the Open Visual Studio Installer link.

  4. 새 프로젝트 구성 페이지에서 프로젝트 이름을 QuickDate로 지정하고 만들기를 선택합니다.

    솔루션 탐색기의 솔루션 아래에 QuickDate 프로젝트가 표시됩니다. 프로젝트에는 References 노드와 App.config라는 단일 파일이 포함됩니다.

프로젝트에 새 항목 추가

빈 프로젝트에 코드 파일을 추가합니다.

  1. 솔루션 탐색기에서 QuickDate 프로젝트의 마우스 오른쪽 단추 클릭 또는 상황에 맞는 메뉴에서 추가>새 항목을 선택합니다.

    새 항목 추가 대화 상자가 열립니다. 대화 상자가 압축 보기에서 열리면 모든 템플릿 표시를 선택합니다.

  2. Visual C# 항목을 펼치고 코드를 선택합니다. 가운데 창에서 클래스 항목 템플릿을 선택합니다. 이름Calendar를 입력하고 추가를 선택합니다.

    Visual Studio에서 Calendar.cs라는 파일을 프로젝트에 추가합니다. 끝에 있는 .cs는 C# 코드 파일의 파일 확장명입니다. 솔루션 탐색기 시각적 프로젝트 계층 구조에 Calendar.cs 파일이 표시되고 편집기에서 열립니다.

  3. Calendar.cs 파일의 콘텐츠를 다음 코드로 바꿉니다.

    using System;
    
    namespace QuickDate
    {
        internal class Calendar
        {
            static void Main(string[] args)
            {
                DateTime now = GetCurrentDate();
                Console.WriteLine($"Today's date is {now}");
                Console.ReadLine();
            }
    
            internal static DateTime GetCurrentDate()
            {
                return DateTime.Now.Date;
            }
        }
    }
    

    아직 코드에서 수행하는 모든 작업을 이해할 필요는 없습니다. Ctrl+F5를 눌러 앱을 실행하고 앱이 ‘콘솔’ 또는 표준 출력 창에 오늘 날짜를 출력하는 것을 확인합니다. 콘솔 창을 닫습니다.

두 번째 프로젝트 추가

일반적으로 솔루션에는 두 개 이상의 프로젝트가 포함되고, 해당 프로젝트가 서로 참조하는 경우가 많습니다. 솔루션의 프로젝트는 클래스 라이브러리, 실행 가능한 애플리케이션, 유닛 테스트 프로젝트 또는 웹 사이트일 수 있습니다.

솔루션에 유닛 테스트 프로젝트를 추가하려면 프로젝트에 다른 코드 파일을 추가할 필요가 없도록 프로젝트 템플릿에서 시작합니다.

  1. 솔루션 탐색기에서 ‘QuickSolution’ 솔루션의 마우스 오른쪽 단추 클릭 또는 상황에 맞는 메뉴에서 추가>새 프로젝트를 선택합니다.

  2. 새 프로젝트 추가 대화 상자에서 단위 테스트라는 텍스트를 상단의 검색 상자에 입력한 다음 언어 아래의 C#을 선택합니다.

  3. .NET Core용 단위 테스트 프로젝트 프로젝트 템플릿을 선택한 후 다음을 선택합니다.

    참고

    Visual Studio 2019 버전 16.9부터 MSTest 프로젝트 템플릿 이름이 MSTest 단위 테스트 프로젝트(.NET Core) 에서 단위 테스트 프로젝트로 변경되었습니다. 이 업데이트에서 프로젝트 만들기의 여러 단계를 변경했습니다.

  4. 프로젝트 이름을 QuickTest로 지정한 다음, 다음을 선택합니다.

  5. 권장되는 대상 프레임워크(.NET Core 3.1) 또는 .NET 5를 선택한 후 만들기를 선택합니다.

    두 번째 프로젝트가 솔루션 탐색기에 추가되고 UnitTest1.cs라는 파일이 편집기에서 열립니다.

    Screenshot that shows Solution Explorer with two projects.

  1. 솔루션 탐색기에서 ‘QuickSolution’ 솔루션의 마우스 오른쪽 단추 클릭 또는 상황에 맞는 메뉴에서 추가>새 프로젝트를 선택합니다.

  2. 새 프로젝트 추가 대화 상자의 맨 위 검색 상자에 ‘유닛 테스트’를 입력하고 모든 언어에서 C# 을 선택합니다.

  3. C# 유닛 테스트 프로젝트(.NET Framework) 프로젝트 템플릿을 선택하고 다음을 선택합니다.

  4. 새 프로젝트 구성 페이지에서 프로젝트 이름을 QuickTest로 지정하고 만들기를 선택합니다.

    Visual Studio에서 QuickTest 프로젝트를 솔루션 탐색기에 추가하고 UnitTest1.cs 파일이 편집기에서 열립니다.

    Screenshot that shows Solution Explorer with two projects.

프로젝트 참조 추가

새 유닛 테스트 프로젝트를 사용하여 QuickDate 프로젝트에서 메서드를 테스트하므로 QuickTest 프로젝트에 QuickDate 참조를 추가해야 합니다. 참조를 추가하면 두 프로젝트 간 ‘빌드 종속성’이 생성됩니다. 즉, 솔루션을 빌드할 때 QuickDateQuickTest보다 먼저 빌드됩니다.

  1. QuickTest 프로젝트의 종속성 노드를 선택하고 오른쪽 마우스 클릭 또는 상황에 맞는 메뉴에서 프로젝트 참조 추가를 선택합니다.

    참조 관리자 대화 상자가 열립니다.

  2. 왼쪽 창에서 프로젝트를 확장하고 솔루션을 선택합니다. 가운데 창에서 QuickDate 옆에 있는 확인란을 선택하고 확인을 선택합니다.

    QuickDate 프로젝트에 대한 참조가 추가됩니다.

    A screenshot of Solution Explorer showing a project reference in Visual Studio 2019.

  1. 솔루션 탐색기에서 QuickTest 프로젝트의 참조 노드를 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 참조 추가를 선택합니다.

  2. 참조 관리자 대화 상자에서 프로젝트를 선택합니다. 가운데 창에서 QuickDate 옆에 있는 확인란을 선택하고 확인을 선택합니다.

    솔루션 탐색기QuickTest 프로젝트 아래에 QuickDate 프로젝트 참조가 표시됩니다.

    A screenshot of Solution Explorer showing a project reference.

테스트 코드 추가

  1. 이제 C# 테스트 코드 파일에 테스트 코드를 추가합니다. UnitTest1.cs의 내용을 다음 코드로 바꿉니다.

    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace QuickTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestGetCurrentDate()
            {
                Assert.AreEqual(DateTime.Now.Date, QuickDate.Calendar.GetCurrentDate());
            }
        }
    }
    

    일부 코드 아래에 빨간색 물결선이 표시됩니다. 테스트 프로젝트를 QuickDate 프로젝트의 friend 어셈블리로 만들면 이 오류를 수정할 수 있습니다.

  2. Calendar.cs 파일의 맨 위에 다음 using 문과 InternalsVisibleToAttribute 특성을 추가하여 테스트 프로젝트의 오류를 해결합니다.

    using System.Runtime.CompilerServices;
    
    [assembly: InternalsVisibleTo("QuickTest")]
    

    Calendar.cs 코드는 다음 스크린샷과 같습니다.

    Screenshot that shows C Sharp code.

    Screenshot that shows C Sharp code.

단위 테스트를 실행합니다.

유닛 테스트가 작동하는지 확인하려면 메뉴 모음에서 테스트>모든 테스트 실행을 선택합니다. 테스트 탐색기 창이 열리고 TestGetCurrentDate 테스트에 통과했다고 표시됩니다.

Screenshot that shows Test Explorer with a passed test.

Screenshot that shows Test Explorer with a passed test.

메뉴 모음에서 테스트>테스트 탐색기를 선택하여 테스트 탐색기를 엽니다.

프로젝트 속성

InternalsVisibleToAttribute 특성이 포함된 Calendar.cs 파일의 줄에서 QuickTest 프로젝트의 어셈블리 이름이나 파일 이름을 참조합니다. 어셈블리 이름은 프로젝트 이름과 동일하지 않을 수 있습니다. 프로젝트의 어셈블리 이름을 찾으려면 프로젝트 속성을 사용합니다. 속성 페이지에는 프로젝트에 대한 다양한 설정이 포함됩니다.

  1. 솔루션 탐색기에서 QuickTest 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택하거나 프로젝트를 선택하고 Alt+Enter를 누릅니다.

    프로젝트의 ‘속성 페이지’가 열리고 애플리케이션 탭이 표시됩니다. QuickTest 프로젝트의 어셈블리 이름은 실제로 QuickTest입니다.

    원하는 경우 여기서 이름을 변경할 수 있습니다. 그러면 테스트 프로젝트를 빌드할 때 결과 이진 파일의 이름이 QuickTest.dll에서 <새 이름>.dll로 변경됩니다.

    Screenshot that shows project properties.

    Screenshot that shows project properties.

  2. 빌드디버그와 같은 프로젝트 속성 페이지의 일부 다른 탭을 탐색합니다. 이러한 탭은 다양한 형식의 프로젝트에 따라 달라집니다.

추가 정보