プロジェクトとソリューションの概要
この入門記事では、Visual Studio で "ソリューション" と "プロジェクト" を作成することの意味について説明します。 ソリューションは、1 つまたは複数の関連するコード プロジェクトを整理するためのコンテナーです。たとえば、クラス ライブラリ プロジェクトとそれに対応するテスト プロジェクトなどです。
プロジェクトの概念を学習して理解するための演習として、ソリューションとプロジェクトをゼロから構築します。 通常、新しいプロジェクトを作成するには、Visual Studio プロジェクト "テンプレート" を使用します。 また、プロジェクトのプロパティと、それに含むことができるいくつかのファイルを確認して、あるプロジェクトから別のプロジェクトへの参照を作成します。
注意
Visual Studio でアプリを開発する場合、ソリューションやプロジェクトは必要ありません。 コードが含まれているフォルダーを開くだけで、コードの作成、ビルド、デバッグを開始することができます。 たとえば、クローンされた GitHub リポジトリには、Visual Studio のプロジェクトとソリューションが含まれていない場合があります。 詳細については、「プロジェクトまたはソリューションを使用せずに Visual Studio でコードを開発する」を参照してください。
Visual Studio 2019 をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。
Visual Studio をまだインストールしていない場合は、Visual Studio のダウンロード ページに移動し、無料試用版をインストールしてください。
ソリューションとプロジェクト
Visual Studio のソリューションは、"解決策" ではありません。 ソリューションは、1 つ以上の関連するプロジェクトを整理するために Visual Studio で使用される単なるコンテナーにすぎません。 ソリューションを開くと、Visual Studio により、ソリューションに含まれるすべてのプロジェクトが自動的に読み込まれます。
ソリューションを作成する
空のソリューションを作成して探索を開始します。 Visual Studio について理解した後は、空のソリューションを頻繁に作成することはないでしょう。 新しいプロジェクトを作成すると、ソリューションがまだ開かれていなければ、Visual Studio により、そのプロジェクト用のソリューションが自動的に作成されます。
Visual Studio を開きます。
[スタート ウィンドウ] で、 [新しいプロジェクトの作成] を選択します。
[新しいプロジェクトの作成] ページで、検索ボックスに「空のソリューション」と入力し、 [空のソリューション] テンプレートを選択して、 [次へ] を選択します。
ヒント
複数のワークロードがインストールされている場合、 [空のソリューション] テンプレートは、検索結果の一覧の先頭に表示されないことがあります。 一覧の [検索に基づく他の結果] セクションまでスクロールしてみてください。 そこに表示されているはずです。
ソリューションに 「QuickSolution」 という名前を付けて、 [作成] を選択します。
Visual Studio ウィンドウの右側にあるソリューション エクスプローラーにソリューションが表示されます。 多くの場合、ソリューション エクスプローラーを使用して、プロジェクトの内容を参照することになります。
Visual Studio を開き、[スタート] ウィンドウで [新しいプロジェクトの作成] を選択します。
[新しいプロジェクトの作成] ページで、検索ボックスに「空のソリューション」と入力し、 [空のソリューション] テンプレートを選択して、 [次へ] を選択します。
ヒント
複数のワークロードがインストールされている場合、 [空のソリューション] テンプレートは、検索結果の一覧の先頭に表示されないことがあります。 テンプレートを見つけるには、 [検索に基づく他の結果] までスクロールしてみてください。
[新しいプロジェクトの構成] ページで、ソリューションに「QuickSolution」という名前を付けて、 [作成] を選択します。
Visual Studio ウィンドウの右側にあるソリューション エクスプローラーに QuickSolution ソリューションが表示されます。 多くの場合、ソリューション エクスプローラーを使用して、プロジェクトの内容を参照します。
プロジェクトを追加する
ここで、最初のプロジェクトをソリューションに追加します。 空のプロジェクトから始めて、必要な項目を追加します。
ソリューション エクスプローラーでソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加]>[新しいプロジェクト] の順に選択します。
[新しいプロジェクトの追加] ダイアログ ボックスが開きます。
上部の検索ボックスに「空の」というテキストを入力し、 言語 で C# を選択します。
[空のプロジェクト (.NET Framework)] テンプレートを選択して、 [次へ] を選択します。
プロジェクトに「QuickDate」という名前を付けて、 [作成] を選択します。
ソリューション エクスプローラーで、ソリューションの下に QuickDate という名前のプロジェクトが表示されます。 現在のところ、このプロジェクトには App.config と呼ばれるファイルが 1 つ含まれています。
注意
[空のプロジェクト (.NET Framework)] テンプレートが表示されない場合は、 .NET デスクトップ開発 Visual Studio ワークロードをインストールする必要があります。 Visual Studio は、ワークロード ベースのインストールを使って、行われる開発の種類に必要なコンポーネントだけをインストールします。
新しいプロジェクトを作成するときに新しいワークロードをインストールする簡単な方法は、 [探しているものが見つからない場合] というテキストの下にある [さらにツールと機能をインストールする] リンクを選択することです。 Visual Studio インストーラーが起動した後、 [.NET デスクトップ開発] ワークロードを選択して、 [変更] ボタンを選択します。
ソリューション エクスプローラーでソリューション [QuickSolution] を右クリックし、コンテキスト メニューから [追加]>[新しいプロジェクト] を選びます。
[新しいプロジェクトの追加] ページで、上部の検索ボックスに「空」と入力し、 [すべての言語] で [C#] を選択します。
C# の [空のプロジェクト (.NET Framework)] テンプレートを選択して、 [次へ] を選択します。
注意
Visual Studio は、ワークロード ベースのインストールを使って、行われる開発の種類に必要なコンポーネントだけをインストールします。 [空のプロジェクト (.NET Framework)] テンプレートが表示されない場合は、 .NET デスクトップ開発 Visual Studio ワークロードをインストールする必要があります。
新しいプロジェクトを作成するときに新しいワークロードをインストールする簡単な方法は、 [探しているものが見つからない場合] というテキストの下にある [さらにツールと機能をインストールする] リンクを選択することです。 Visual Studio インストーラーで、 [.NET デスクトップ開発] ワークロードを選択し、 [変更] ボタンを選択します。
[新しいプロジェクトの構成] ページで、プロジェクトに「QuickDate」という名前を付けて、 [作成] を選択します。
ソリューション エクスプローラーのソリューションの下に QuickDate プロジェクトが表示されます。 プロジェクトに、References ノードと App.config という名前の 1 つのファイルが含まれています。
プロジェクトにアイテムを追加する
コード ファイルを空のプロジェクトに追加します。
ソリューション エクスプローラーで QuickDate プロジェクトの右クリックまたはコンテキスト メニューから、 [追加]>[新しい項目] の順に選択します。
[新しい項目の追加] ダイアログ ボックスが開きます。 ダイアログがコンパクト ビューで開いた場合は、[Show All Templates] (すべてのテンプレートを表示) を選びます。
[Visual C# アイテム] を展開して、 [コード] を選択します。 中央のウィンドウで、 [クラス] 項目テンプレートを選択します。 [名前] で、「Calendar」と入力し、 [追加] を選択します。
Visual Studio により、Calendar.cs という名前のファイルがプロジェクトに追加されます。 末尾の .cs は、C# コード ファイルのファイル拡張子です。 ビジュアル プロジェクト階層のソリューション エクスプローラーに Calendar.cs ファイルが表示され、エディターでファイルが開きます。
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 サイトなどがあります。
単体テスト プロジェクトをソリューションに追加するには、プロジェクト テンプレートから開始して、プロジェクトに別のコード ファイルを追加する必要がないようにします。
ソリューション エクスプローラーでソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加]>[新しいプロジェクト] の順に選択します。
[新しいプロジェクトの追加] ダイアログ ボックスで、上部にある検索ボックスに「単体テスト」というテキストを入力し、[言語] で [C#] を選択します。
.NET Core 用の [単体テスト プロジェクト] プロジェクト テンプレートを選択して、 [次へ] を選択します。
注意
Visual Studio 2019 バージョン 16.9 以降では、MSTest プロジェクト テンプレートの名前が MSTest 単体テスト プロジェクト (.NET Core) から [単体テスト プロジェクト] に変更されました。 この更新では、プロジェクト作成のいくつかの手順が変更されました。
プロジェクトに「QuickTest」という名前を付けて、 [次へ] を選択します。
推奨されるターゲット フレームワーク (.NET Core 3.1) または .NET 5 を選択し、 [作成] を選択します。
2 つ目のプロジェクトがソリューション エクスプローラーに追加され、UnitTest1.cs という名前のファイルがエディターで開きます。
ソリューション エクスプローラーでソリューション "QuickSolution" の右クリックまたはコンテキスト メニューから、 [追加]>[新しいプロジェクト] の順に選択します。
[新しいプロジェクトの追加] ダイアログ ボックスで、上部にある検索ボックスに「単体テスト」と入力し、 [すべての言語] で [C#] を選択します。
C# [単体テスト プロジェクト (.NET Framework)] プロジェクト テンプレートを選択し、 [次へ] を選択します。
[新しいプロジェクトの構成] ページで、プロジェクトに「QuickTest」という名前を付けて、 [作成] を選択します。
Visual Studio により、QuickTest プロジェクトがソリューション エクスプローラーに追加され、エディターで UnitTest1.cs ファイルが開きます。
プロジェクト参照を追加する
新しい単体テスト プロジェクトを使用して QuickDate プロジェクトのメソッドをテストするため、QuickDate への参照を QuickTest プロジェクトに追加する必要があります。 参照を追加することによって、2 つのプロジェクトの間に "ビルドの依存関係" が作成されます。つまり、ソリューションをビルドすると、QuickDate がビルドされた後に QuickTest がビルドされます。
QuickTest プロジェクトで [依存関係] ノードを選択し、右クリックまたはコンテキスト メニューから、 [プロジェクト参照の追加] を選択します。
[参照マネージャー] ダイアログ ボックスが表示されます。
左側のウィンドウで、 [プロジェクト] を展開して、 [ソリューション] を選択します。 中央のウィンドウで、QuickDate の横にあるチェック ボックスをオンにして、 [OK] を選択します。
QuickDate プロジェクトへの参照が追加されます。
ソリューション エクスプローラーで、 [QuickTest] プロジェクトの [参照] ノードを右クリックし、コンテキスト メニューから [参照の追加] を選択します。
[参照マネージャー] ダイアログ ボックスで、[プロジェクト] を選択します。 中央のウィンドウで、QuickDate の横にあるチェック ボックスをオンにして、 [OK] を選択します。
ソリューション エクスプローラーの [QuickTest] プロジェクトの下に QuickDate プロジェクトへの参照が表示されます。
テスト コードを追加する
ここで、テスト コードを 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 プロジェクトに対するフレンド アセンブリにすることで、このエラーを修正できます。
Calendar.cs ファイルで、次の using ステートメントと InternalsVisibleToAttribute 属性をファイルの先頭に追加して、テスト プロジェクトのエラーを解決します。
using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("QuickTest")]
Calendar.cs コードは、次のスクリーンショットのようになります。
単体テストを実行する
単体テストが動作していることを確認するには、メニュー バーから [テスト]>[すべてのテストを実行する] の順に選択します。 テスト エクスプローラー ウィンドウが開くので、TestGetCurrentDate テストが成功していることを確認する必要があります。
ヒント
[テスト エクスプローラー] は、メニュー バーで [テスト]>[テスト エクスプローラー] を選択して開くこともできます。
プロジェクトのプロパティ
InternalsVisibleToAttribute 属性を含む Calendar.cs ファイル内の行は、QuickTest プロジェクトのアセンブリ名またはファイル名を参照します。 アセンブリ名はプロジェクト名と常に同じであるとは限りません。 プロジェクトのアセンブリ名を検索するには、プロジェクトのプロパティを使用します。 プロパティ ページには、プロジェクトのさまざまな設定が含まれます。
ソリューション エクスプローラーで、 [QuickTest] プロジェクトを右クリックし、 [プロパティ] を選択するか、またはプロジェクトを選択して、Alt+Enter キーを押します。
プロジェクトのプロパティ ページが [アプリケーション] タブで開きます。QuickTest プロジェクトのアセンブリ名は確かに QuickTest です。
必要に応じて、ここで名前を変更できます。 テスト プロジェクトをビルドすると、生成されたバイナリ ファイルの名前は、QuickTest.dll から "<新しい名前>.dll" に変更されます。
[ビルド] や [デバッグ] など、プロジェクトのプロパティ ページの他のいくつかのタブを見てみます。 これらのタブは、プロジェクトの種類によって異なります。