プロジェクトとソリューションの概要

この入門記事では、Visual Studio で "ソリューション" と "プロジェクト" を作成することの意味について説明します。 ソリューションは、1 つまたは複数の関連するコード プロジェクトを整理するためのコンテナーです。たとえば、クラス ライブラリ プロジェクトとそれに対応するテスト プロジェクトなどです。

プロジェクトの概念を学習して理解するための演習として、ソリューションとプロジェクトをゼロから構築します。 通常、新しいプロジェクトを作成するには、Visual Studio プロジェクト "テンプレート" を使用します。 また、プロジェクトのプロパティと、それに含むことができるいくつかのファイルを確認して、あるプロジェクトから別のプロジェクトへの参照を作成します。

注意

Visual Studio でアプリを開発する場合、ソリューションやプロジェクトは必要ありません。 コードが含まれているフォルダーを開くだけで、コードの作成、ビルド、デバッグを開始することができます。 たとえば、クローンされた GitHub リポジトリには、Visual Studio のプロジェクトとソリューションが含まれていない場合があります。 詳細については、「プロジェクトまたはソリューションを使用せずに Visual Studio でコードを開発する」を参照してください。

Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。

Visual Studio 2019 をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。

Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。

ソリューションとプロジェクト

Visual Studio のソリューションは、"解決策" ではありません。 ソリューションは、1 つ以上の関連するプロジェクトを整理するために Visual Studio で使用される単なるコンテナーにすぎません。 ソリューションを開くと、Visual Studio により、ソリューションに含まれるすべてのプロジェクトが自動的に読み込まれます。

ソリューションを作成する

空のソリューションを作成して探索を開始します。 Visual Studio について理解した後は、空のソリューションをそれほど頻繁に作成することはないでしょう。 新しいプロジェクトを作成すると、ソリューションがまだ開かれていなければ、Visual Studio により、そのプロジェクト用のソリューションが自動的に作成されます。

  1. Visual Studio を開きます。

  2. 上部のメニュー バーで、 [ファイル] > [新規作成] > [プロジェクト] の順に選択します。

    [新しいプロジェクト] ダイアログ ボックスが表示されます。

  3. 左側のウィンドウで、 [その他のプロジェクトの種類] を展開して、 [Visual Studio ソリューション] を選択します。 中央のウィンドウで、 [空のソリューション] テンプレートを選択します。 ソリューションに「QuickSolution」という名前を付けて、 [OK] ボタンを選択します。

    Visual Studio 2017 で選択された空のソリューション テンプレートを示すスクリーンショット。

    [スタート ページ] が閉じて、Visual Studio ウィンドウの右側にある ソリューション エクスプローラー にソリューションが表示されます。 多くの場合、ソリューション エクスプローラー を使用して、プロジェクトの内容を参照することになります。

  1. Visual Studio を開きます。

  2. [スタート ウィンドウ] で、 [新しいプロジェクトの作成] を選択します。

  3. [新しいプロジェクトの作成] ページで、検索ボックスに「空のソリューション」と入力し、 [空のソリューション] テンプレートを選択して、 [次へ] を選択します。

    Visual Studio 2019 で選択された空のソリューション テンプレートを示すスクリーンショット。

    ヒント

    複数のワークロードがインストールされている場合、 [空のソリューション] テンプレートは、検索結果の一覧の先頭に表示されないことがあります。 一覧の [検索に基づく他の結果] セクションまでスクロールしてみてください。 そこに表示されているはずです。

  4. ソリューションに 「QuickSolution」 という名前を付けて、 [作成] を選択します。

    Visual Studio ウィンドウの右側にある ソリューション エクスプローラー にソリューションが表示されます。 多くの場合、ソリューション エクスプローラー を使用して、プロジェクトの内容を参照することになります。

  1. Visual Studio を開き、[スタート] ウィンドウで [新しいプロジェクトの作成] を選択します。

  2. [新しいプロジェクトの作成] ページで、検索ボックスに「空のソリューション」と入力し、 [空のソリューション] テンプレートを選択して、 [次へ] を選択します。

    Visual Studio で選択された空のソリューション テンプレートを示すスクリーンショット。

    ヒント

    複数のワークロードがインストールされている場合、 [空のソリューション] テンプレートは、検索結果の一覧の先頭に表示されないことがあります。 テンプレートを見つけるには、 [検索に基づく他の結果] までスクロールしてみてください。

  3. [新しいプロジェクトの構成] ページで、ソリューションに「QuickSolution」という名前を付けて、 [作成] を選択します。

    Visual Studio ウィンドウの右側にある ソリューション エクスプローラーQuickSolution ソリューションが表示されます。 多くの場合、ソリューション エクスプローラー を使用して、プロジェクトの内容を参照します。

プロジェクトを追加する

ここで、最初のプロジェクトをソリューションに追加します。 空のプロジェクトから始めて、必要な項目を追加します。

  1. ソリューション エクスプローラーソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加] > [新しいプロジェクト] の順に選択します。

    [新しいプロジェクトの追加] ダイアログ ボックスが表示されます。

  2. 左側のウィンドウで、 [Visual C#] を展開し、 [Windows デスクトップ] を選択します。 次に、中央のウィンドウで、 [空のプロジェクト (.NET Framework)] テンプレートを選択します。 プロジェクトに「QuickDate」という名前を付けて、 [OK] を選択します。

    ソリューション エクスプローラー で、ソリューションの下に QuickDate という名前のプロジェクトが表示されます。 現在のところ、このプロジェクトには App.config と呼ばれるファイルが 1 つ含まれています。

    注意

    ダイアログ ボックスの左側のウィンドウに Visual C# が表示されない場合は、 .NET デスクトップ開発 Visual Studio ワークロードをインストールする必要があります。 Visual Studio は、ワークロード ベースのインストールを使って、行われる開発の種類に必要なコンポーネントだけをインストールします。 新しいワークロードをインストールする簡単な方法は、 [新しいプロジェクトの追加] ダイアログ ボックスの左下隅にある [Visual Studio インストーラーを開く] リンクをクリックすることです。 Visual Studio インストーラーが起動した後、 [.NET デスクトップ開発] ワークロードを選択して、 [変更] ボタンを選択します。

    [Visual Studio インストーラーを開く] リンクを示すスクリーンショット。

  1. ソリューション エクスプローラーソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加] > [新しいプロジェクト] の順に選択します。

    [新しいプロジェクトの追加] ダイアログ ボックスが開きます。

  2. 上部の検索ボックスに「空の」というテキストを入力し、 言語C# を選択します。

  3. [空のプロジェクト (.NET Framework)] テンプレートを選択して、 [次へ] を選択します。

  4. プロジェクトに「QuickDate」という名前を付けて、 [作成] を選択します。

    ソリューション エクスプローラー で、ソリューションの下に QuickDate という名前のプロジェクトが表示されます。 現在のところ、このプロジェクトには App.config と呼ばれるファイルが 1 つ含まれています。

    注意

    [空のプロジェクト (.NET Framework)] テンプレートが表示されない場合は、 .NET デスクトップ開発 Visual Studio ワークロードをインストールする必要があります。 Visual Studio は、ワークロード ベースのインストールを使って、行われる開発の種類に必要なコンポーネントだけをインストールします。

    新しいプロジェクトを作成するときに新しいワークロードをインストールする簡単な方法は、 [探しているものが見つからない場合] というテキストの下にある [さらにツールと機能をインストールする] リンクを選択することです。 Visual Studio インストーラーが起動した後、 [.NET デスクトップ開発] ワークロードを選択して、 [変更] ボタンを選択します。

    [Visual Studio インストーラーを開く] リンクを示すスクリーンショット。

  1. ソリューション エクスプローラー でソリューション [QuickSolution] を右クリックし、コンテキスト メニューから [追加] > [新しいプロジェクト] の順に選択します。

  2. [新しいプロジェクトの追加] ページで、上部の検索ボックスに「」と入力し、 [すべての言語][C#] を選択します。

  3. C# の [空のプロジェクト (.NET Framework)] テンプレートを選択して、 [次へ] を選択します。

    注意

    Visual Studio は、ワークロード ベースのインストールを使って、行われる開発の種類に必要なコンポーネントだけをインストールします。 [空のプロジェクト (.NET Framework)] テンプレートが表示されない場合は、 .NET デスクトップ開発 Visual Studio ワークロードをインストールする必要があります。

    新しいプロジェクトを作成するときに新しいワークロードをインストールする簡単な方法は、 [探しているものが見つからない場合] というテキストの下にある [さらにツールと機能をインストールする] リンクを選択することです。 Visual Studio インストーラーで、 [.NET デスクトップ開発] ワークロードを選択し、 [変更] ボタンを選択します。

    [Visual Studio インストーラーを開く] リンクを示すスクリーンショット。

  4. [新しいプロジェクトの構成] ページで、プロジェクトに「QuickDate」という名前を付けて、 [作成] を選択します。

    ソリューション エクスプローラー のソリューションの下に QuickDate プロジェクトが表示されます。 この時点で、プロジェクトには、App.config という名前のファイルが 1 つ含まれています。

プロジェクトにアイテムを追加する

コード ファイルを空のプロジェクトに追加します。

  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 キーを押してアプリを実行し、アプリによって今日の日付が "コンソール" (標準出力) ウィンドウに出力されることを確認します。 次に、コンソール ウィンドウを閉じます。

2 つ目のプロジェクトを追加する

通常、ソリューションには複数のプロジェクトが含まれており、多くの場合、これらのプロジェクトは相互に参照します。 ソリューション内のプロジェクトには、クラス ライブラリ、実行可能アプリケーション、単体テスト プロジェクトまたは Web サイトなどがあります。

単体テスト プロジェクトをソリューションに追加するには、プロジェクト テンプレートから開始して、プロジェクトに別のコード ファイルを追加する必要がないようにします。

  1. ソリューション エクスプローラーソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加] > [新しいプロジェクト] の順に選択します。

  2. 左側のウィンドウで、 [Visual C#] を展開し、 [テスト] カテゴリを選択します。 中央のウィンドウで、 [MSTest テスト プロジェクト (.NET Core)] プロジェクト テンプレートを選択します。 プロジェクトに「QuickTest」という名前を付けて、 [OK] を選択します。

    2 つ目のプロジェクトが ソリューション エクスプローラー に追加され、UnitTest1.cs という名前のファイルがエディターで開きます。

    2 つのプロジェクトを含むソリューション エクスプローラーを示すスクリーンショット。

  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 を選択し、 [作成] を選択します。

    2 つ目のプロジェクトが ソリューション エクスプローラー に追加され、UnitTest1.cs という名前のファイルがエディターで開きます。

    2 つのプロジェクトを含むソリューション エクスプローラーを示すスクリーンショット。

  1. ソリューション エクスプローラーソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加] > [新しいプロジェクト] の順に選択します。

  2. [新しいプロジェクトの追加] ダイアログ ボックスで、上部にある検索ボックスに「単体テスト」と入力し、 [すべての言語][C#] を選択します。

  3. C# [単体テスト プロジェクト (.NET Framework)] プロジェクト テンプレートを選択し、 [次へ] を選択します。

  4. [新しいプロジェクトの構成] ページで、プロジェクトに「QuickTest」という名前を付けて、 [作成] を選択します。

    Visual Studio により、QuickTest プロジェクトが ソリューション エクスプローラー に追加され、エディターで UnitTest1.cs ファイルが開きます。

    2 つのプロジェクトを含むソリューション エクスプローラーを示すスクリーンショット。

プロジェクト参照を追加する

新しい単体テスト プロジェクトを使用して QuickDate プロジェクトのメソッドをテストするため、QuickDate への参照を QuickTest プロジェクトに追加する必要があります。 参照を追加することによって、2 つのプロジェクトの間に "ビルドの依存関係" が作成されます。つまり、ソリューションをビルドすると、QuickDate がビルドされた後に QuickTest がビルドされます。

  1. QuickTest プロジェクトで [依存関係] ノードを選択し、右クリックまたはコンテキスト メニューから、 [参照の追加] を選択します。

    [参照マネージャー] ダイアログ ボックスが表示されます。

  2. 左側のウィンドウで、 [プロジェクト] を展開し、 [ソリューション] を選択します。 中央のウィンドウで、QuickDate の横にあるチェック ボックスをオンにして、 [OK] を選択します。

    QuickDate プロジェクトへの参照が追加されます。

    プロジェクト参照が示されている Visual Studio のソリューション エクスプローラーのスクリーンショット。

  1. QuickTest プロジェクトで [依存関係] ノードを選択し、右クリックまたはコンテキスト メニューから、 [プロジェクト参照の追加] を選択します。

    [参照マネージャー] ダイアログ ボックスが表示されます。

  2. 左側のウィンドウで、 [プロジェクト] を展開して、 [ソリューション] を選択します。 中央のウィンドウで、QuickDate の横にあるチェック ボックスをオンにして、 [OK] を選択します。

    QuickDate プロジェクトへの参照が追加されます。

    プロジェクト参照が示されている Visual Studio 2019 のソリューション エクスプローラーのスクリーンショット。

  1. ソリューション エクスプローラー で、 [QuickTest] プロジェクトの [参照] ノードを右クリックし、コンテキスト メニューから [参照の追加] を選択します。

  2. [参照マネージャー] ダイアログ ボックスの [プロジェクト] で、 [QuickDate] の横にあるチェックボックスをオンにして、 [OK] を選択します。

    ソリューション エクスプローラー[QuickTest] プロジェクトの下に QuickDate プロジェクトへの参照が表示されます。

    プロジェクト参照が表示されたソリューション エクスプローラーのスクリーンショット。

テスト コードを追加する

  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 プロジェクトに対する フレンド アセンブリにすることで、このエラーを修正できます。

  2. Calendar.cs ファイルで、次の using ステートメントInternalsVisibleToAttribute 属性をファイルの先頭に追加して、テスト プロジェクトのエラーを解決します。

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

    Calendar.cs コードは、次のスクリーンショットのようになります。

    C# コードを示すスクリーンショット。

    C# コードを示すスクリーンショット。

単体テストを実行する

単体テストが動作していることを確認する場合は、メニュー バーから [テスト] > [実行] > [すべてのテスト] を選択します。 テスト エクスプローラー と呼ばれるウィンドウが開くので、TestGetCurrentDate テストが成功しているか確認する必要があります。

単体テストが動作していることを確認するには、メニュー バーから [テスト] > [すべてのテストを実行する] の順に選択します。 テスト エクスプローラー ウィンドウが開くので、TestGetCurrentDate テストが成功していることを確認する必要があります。

テストが成功したテスト エクスプローラーを示すスクリーンショット。

テストが成功したテスト エクスプローラーを示すスクリーンショット。

ヒント

テスト エクスプローラー が自動的に開かない場合は、メニュー バーから [テスト] > [Windows] > [テスト エクスプローラー] を選択して開きます。

ヒント

テスト エクスプローラー が自動的に開かない場合は、メニュー バーから [テスト] > [テスト エクスプローラー] を選択して開きます。

プロジェクトのプロパティ

InternalsVisibleToAttribute 属性を含む Calendar.cs ファイル内の行は、QuickTest プロジェクトのアセンブリ名またはファイル名を参照します。 アセンブリ名はプロジェクト名と常に同じであるとは限りません。 プロジェクトのアセンブリ名を検索するには、プロジェクトのプロパティを使用します。 プロパティ ページには、プロジェクトのさまざまな設定が含まれます。

  1. ソリューション エクスプローラー で、 [QuickTest] プロジェクトを右クリックし、 [プロパティ] を選択するか、またはプロジェクトを選択して、Alt + Enter キーを押します。

    プロジェクトの プロパティ ページ[アプリケーション] タブで開きます。QuickTest プロジェクトの アセンブリ名 は確かに QuickTest です。

    必要に応じて、ここで名前を変更できます。 テスト プロジェクトをビルドすると、生成されたバイナリ ファイルの名前は、QuickTest.dll から <NewName>.dll に変更されます。

    プロジェクトのプロパティを示すスクリーンショット。

  2. [ビルド][デバッグ] など、プロジェクトのプロパティ ページの他のいくつかのタブを見てみます。 これらのタブは、プロジェクトの種類によって異なります。

関連項目