C#プロジェクトの作り方完全ガイド|初心者が迷うVisual Studio・ソリューション・.csprojの違いを解説
はじめに
C#を学び始めたとき、多くの初心者が最初に迷うのが「C#プロジェクトとは何か」という点です。Visual Studioで新規作成画面を開くと、コンソールアプリ、Windowsフォーム、WPF、ASP.NET Coreなど、多数のテンプレートが表示されます。さらに、プロジェクト、ソリューション、.csprojファイルといった聞き慣れない用語も登場します。
C#プロジェクトとは、ソースコードや設定ファイル、画像などのリソース、外部ライブラリの情報をひとまとめにして管理する単位です。単に.csファイルを作るだけではなく、どの.NETを使用するのか、どのライブラリを参照するのか、どのようにビルドするのかといった情報も含まれています。
本記事では、Visual Studioを使ったC#プロジェクトの作り方から、ソリューションとの違い、.csprojファイルの役割、フォルダ構成、コマンドラインでの作成方法まで、初心者にもわかりやすく解説します。
1. C#プロジェクトとは?初心者が最初に理解すべき基本
1-1. C#プロジェクトの意味と役割
C#プロジェクトとは、C#でアプリケーションやライブラリを作るために必要なファイルをまとめた単位です。
一般的なC#プロジェクトには、次のようなものが含まれます。
C#のソースコード
プロジェクトの設定情報
使用する.NETのバージョン
外部ライブラリの情報
画像や設定ファイルなどのリソース
ビルドや実行に関する情報
たとえば、簡単なコンソールアプリでも、画面に文字を表示するProgram.csだけでなく、プロジェクト設定を記録した.csprojファイルが存在します。
Visual Studioやdotnetコマンドは、このプロジェクト情報を読み取り、C#コードをコンピューターが実行できる形式に変換します。この変換作業が「ビルド」です。
1-2. プロジェクト・ソリューション・ファイルの関係
C#開発では、主に次の3つの単位を理解する必要があります。
| 単位 | 役割 |
|---|---|
| ファイル | 個別のC#コードや設定を保存する |
| プロジェクト | 関連するファイルとビルド設定をまとめる |
| ソリューション | 1つ以上のプロジェクトをまとめて管理する |
たとえば、ネットショップを開発する場合は、次のような構成が考えられます。
ShopSystem.sln├─ Shop.Web│ ├─ Shop.Web.csproj│ └─ Web画面のコード├─ Shop.Core│ ├─ Shop.Core.csproj│ └─ 商品や注文の処理└─ Shop.Tests├─ Shop.Tests.csproj└─ テストコードShopSystem.slnがソリューション、Shop.WebやShop.Coreがプロジェクト、その中の.csファイルが個別のソースコードです。
初心者が小さなプログラムを作る場合は、1つのソリューションに1つのプロジェクトが入っている構成でも問題ありません。
1-3. C#プロジェクトで作れるアプリの種類
C#プロジェクトでは、さまざまな種類のアプリケーションを作成できます。
代表的なものは次のとおりです。
文字を入出力するコンソールアプリ
Windows向けのデスクトップアプリ
WebサイトやWeb API
クラスや機能をまとめたライブラリ
自動テスト用のプロジェクト
クラウド上で動作するサービス
ゲーム開発で使用するロジック
バッチ処理や業務用ツール
作りたいものによって選択するプロジェクトテンプレートが異なります。テンプレートを正しく選ぶと、必要な設定や基本ファイルが自動的に作成されるため、すぐに開発を始められます。
1-4. 初心者が「C#プロジェクト」でつまずきやすいポイント
初心者がつまずきやすいのは、プロジェクトとソースファイルを同じものだと考えてしまうことです。
C#コード自体は.csファイルに記述しますが、そのファイルをどのようにビルドするかはプロジェクト側で管理します。そのため、.csファイルだけを別の場所へコピーしても、参照しているライブラリや設定が不足し、正常に動作しないことがあります。
ほかにも、次のような点で迷いやすくなります。
テンプレートが多く、どれを選べばよいかわからない
プロジェクト名とソリューション名の違いがわからない
.NETや.NET Frameworkの違いがわからないbinやobjなどのフォルダが自動生成される実行時に複数のプロジェクトから選択を求められる
.csprojや.slnを直接編集してよいのかわからない
最初からすべてを暗記する必要はありません。まずは「C#プロジェクトが、プログラムに必要なファイルと設定をまとめる箱である」と理解しておけば十分です。
2. C#プロジェクト作成前に準備するもの
2-1. Visual StudioとVisual Studio Codeの違い
Visual StudioとVisual Studio Codeは名前が似ていますが、異なる開発ツールです。
Visual Studioは、C#開発に必要な機能を幅広く備えた統合開発環境です。プロジェクト作成、コード編集、ビルド、実行、デバッグ、テスト、NuGetパッケージ管理などを画面上で操作できます。
一方、Visual Studio Codeは軽量なコードエディターです。C#開発にも利用できますが、基本的には.NET SDKやC#用拡張機能を別途準備し、必要に応じてコマンドラインを使用します。
| 比較項目 | Visual Studio | Visual Studio Code |
| 種類 | 統合開発環境 | コードエディター |
| C#開発機能 | 標準で充実 | 拡張機能で追加 |
| プロジェクト作成 | 画面操作が中心 | コマンド操作も使用 |
| 動作 | 比較的重い | 比較的軽い |
| 対応OS | 主にWindows | Windows、macOS、Linux |
| 初心者向け | 非常に使いやすい | 基本操作の理解が必要 |
WindowsでC#を初めて学ぶ場合は、Visual Studioがわかりやすい選択です。macOSやLinuxを使用する場合や、軽量な環境を好む場合はVisual Studio Codeが候補になります。
2-2. .NET SDKとは何か
.NET SDKは、C#プロジェクトの作成、ビルド、実行に必要な開発用ツールのセットです。
SDKは「Software Development Kit」の略で、主に次のものが含まれています。
C#コンパイラ
dotnetコマンドプロジェクトテンプレート
ビルドツール
実行に必要な.NETランタイム
基本ライブラリ
.NET SDKがインストールされているかは、ターミナルやコマンドプロンプトで次のコマンドを実行すると確認できます。
dotnet --versionインストール済みのSDK一覧を確認する場合は、次のコマンドを使用します。
dotnet --list-sdksバージョン番号が表示されれば、基本的な.NET開発環境は用意できています。
2-3. C#開発に必要なインストール項目
Visual StudioでC#プロジェクトを作る場合は、Visual Studio Installerで「ワークロード」を選択します。
作りたいアプリに応じて、次のワークロードを選びます。
コンソールアプリや基本的なC#開発:.NETデスクトップ開発
WindowsフォームやWPF:.NETデスクトップ開発
ASP.NET Core:ASP.NETとWeb開発
クラウド関連:Azure開発
ゲーム関連:Unityによるゲーム開発
C#の基本学習が目的なら、まず「.NETデスクトップ開発」をインストールすればよいでしょう。後からVisual Studio Installerを開き、別のワークロードを追加することもできます。
Visual Studio Codeを使う場合は、主に次の項目を準備します。
.NET SDK
Visual Studio Code本体
C#開発用の拡張機能
必要に応じてGit
2-4. Windows・Mac・Linuxでの開発環境の違い
C#と.NETはWindowsだけでなく、macOSやLinuxでも利用できます。ただし、作成できるアプリの種類には違いがあります。
Windowsでは、コンソールアプリ、ASP.NET Core、Windowsフォーム、WPFなど、幅広いC#プロジェクトを作成できます。
macOSやLinuxでも、コンソールアプリ、ASP.NET Core、クラスライブラリなどを開発できます。一方、WindowsフォームやWPFはWindows向けの技術であるため、基本的にWindows環境が必要です。
| プロジェクト種類 | Windows | macOS | Linux |
| コンソールアプリ | ○ | ○ | ○ |
| ASP.NET Core | ○ | ○ | ○ |
| クラスライブラリ | ○ | ○ | ○ |
| Windowsフォーム | ○ | 原則不可 | 原則不可 |
| WPF | ○ | 原則不可 | 原則不可 |
複数のOSで動かしたいアプリを作る場合は、対象技術がクロスプラットフォームに対応しているか確認しましょう。
2-5. 初心者におすすめの開発環境
Windowsを使用している初心者には、Visual Studio Communityと.NETの組み合わせがおすすめです。
Visual Studio Communityは、個人学習や条件を満たす開発用途で利用でき、C#プロジェクトの作成からデバッグまでを画面上で行えます。設定の多くが自動化されているため、プログラミングそのものに集中しやすい環境です。
おすすめの学習手順は次のとおりです。
Visual Studioをインストールする
「.NETデスクトップ開発」を選択する
コンソールアプリを作成する
コードを書き換えて実行する
ブレークポイントを使ってデバッグする
慣れてからWebアプリやデスクトップアプリに進む
Visual Studio Codeから始める場合は、ファイル操作やターミナルの基本もあわせて覚える必要があります。
3. Visual StudioでC#プロジェクトを作成する手順
3-1. Visual Studioを起動して新しいプロジェクトを作成する
Visual StudioでC#プロジェクトを作成する基本手順は次のとおりです。
Visual Studioを起動する
スタート画面で「新しいプロジェクトの作成」を選択する
使用するプロジェクトテンプレートを選択する
「次へ」を選択する
プロジェクト名や保存場所を入力する
使用するフレームワークなどを設定する
「作成」を選択する
すでにVisual Studioで別のプロジェクトを開いている場合は、メニューから「ファイル」「新規作成」「プロジェクト」の順に選択して作成できます。
3-2. プロジェクトテンプレートの選び方
新しいプロジェクトの作成画面では、言語、プラットフォーム、プロジェクトの種類でテンプレートを絞り込めます。
C#プロジェクトを探す場合は、言語の絞り込みで「C#」を選びます。そのうえで、作りたいアプリに対応するテンプレートを選択します。
| 作りたいもの | 主なテンプレート |
| C#の基本を学びたい | コンソールアプリ |
| Windows用の業務画面 | Windowsフォームアプリ |
| 柔軟なWindows画面 | WPFアプリケーション |
| Webサイト | ASP.NET Core Webアプリ |
| Web API | ASP.NET Core Web API |
| 共通機能 | クラスライブラリ |
| 自動テスト | MSTest、NUnit、xUnitなど |
名前が似たテンプレートが複数表示される場合は、説明欄に記載されている対象フレームワークや用途を確認してください。
初心者がC#の文法を学ぶ目的なら、「コンソールアプリ」を選ぶのが最も簡単です。
3-3. プロジェクト名・保存場所・ソリューション名の決め方
プロジェクト名は、作成するアプリの目的がわかる名前にします。
たとえば、家計簿アプリであれば次のような名前が考えられます。
HouseholdBudget避けたほうがよい名前には、次のようなものがあります。
testsampleproject1newproject一時的な学習用であれば問題ありませんが、プロジェクトが増えると内容を判断できなくなります。
保存場所は、C#開発用のフォルダを決めて統一すると管理しやすくなります。
C:\Development\CSharpソリューション名は、複数の関連プロジェクトをまとめる全体名です。1プロジェクトだけで始める場合は、プロジェクト名とソリューション名が同じでも問題ありません。
3-4. フレームワークのバージョン選択
プロジェクト作成時には、対象となる.NETのバージョンを選択します。これをターゲットフレームワークと呼びます。
新しく学習用プロジェクトを作る場合は、利用できるバージョンのうち、サポート期間が長いLTS版を選ぶと安定して学習できます。勤務先や開発チームで使用するバージョンが決まっている場合は、その指定に従ってください。
古いシステムの保守では、.NET Frameworkを使用することがあります。しかし、新しく一般的なC#アプリを作るのであれば、通常は現在の.NETを選択します。
バージョン選択では、次の点を確認しましょう。
開発環境に対応するSDKが入っているか
使用予定のライブラリが対応しているか
配布先の環境で動作するか
チーム内でバージョンが統一されているか
サポート期間が残っているか
3-5. 作成したC#プロジェクトを実行する方法
Visual StudioでC#プロジェクトを実行するには、画面上部の実行ボタンを選択します。
主な実行方法は次の2つです。
F5:デバッグありで実行Ctrl + F5:デバッグなしで実行
デバッグありで実行すると、ブレークポイントを設定して処理を一時停止し、変数の中身を確認できます。デバッグなしの場合は、通常のアプリとしてすぐに実行されます。
コンソールアプリのProgram.csが次の内容なら、「Hello, World!」が表示されます。
Console.WriteLine("Hello, World!");コードを書き換えた後にもう一度実行すると、Visual Studioが自動的にビルドを行い、最新の内容でアプリを起動します。
4. C#プロジェクトの種類と選び方
4-1. コンソールアプリとは
コンソールアプリは、文字を入力したり結果を文字で表示したりする、シンプルなC#プロジェクトです。
Console.Write("名前を入力してください: ");string? name = Console.ReadLine();Console.WriteLine($"こんにちは、{name}さん");
画面部品の配置を考える必要がないため、変数、条件分岐、繰り返し、メソッド、クラスなど、C#の基本文法を学ぶのに適しています。
学習用だけでなく、ファイル変換、定期処理、データ集計、サーバー管理用ツールなどにも利用されます。
4-2. Windowsフォームアプリとは
Windowsフォームアプリは、ボタン、テキストボックス、一覧表などを配置してWindows用の画面を作るプロジェクトです。
Visual Studioのデザイナー画面を使い、部品をドラッグ&ドロップして配置できます。比較的簡単に画面を作れるため、社内向けの業務ツールや小規模なWindowsアプリで使われています。
ボタンが押されたときの処理は、イベントとして記述します。
private void button1_Click(object sender, EventArgs e){label1.Text = "ボタンが押されました";}WindowsフォームはWindows向けの技術なので、macOSやLinuxで動くデスクトップアプリを作る用途には適していません。
4-3. WPFアプリとは
WPFは、Windows向けのデスクトップアプリを作成するための技術です。画面をXAMLという形式で定義し、処理をC#で記述します。
<Button Content="実行"Width="120"Height="40"Click="Button_Click" />WPFはWindowsフォームよりも、デザインやレイアウトを柔軟に構築できます。また、MVVMと呼ばれる設計パターンを採用しやすく、一定規模以上のWindowsアプリにも向いています。
ただし、XAMLやデータバインディングなど、C#以外の知識も必要です。完全な初心者は、コンソールアプリでC#の基本を学んでから挑戦すると理解しやすくなります。
4-4. ASP.NET Core Webアプリとは
ASP.NET Coreは、C#でWebサイトやWeb APIを開発するためのフレームワークです。
代表的なプロジェクトには、次のようなものがあります。
Razor Pagesを使ったWebアプリ
MVC構成のWebアプリ
ASP.NET Core Web API
Blazorを使ったWebアプリ
Web開発ではC#だけでなく、HTML、CSS、JavaScript、HTTP、データベースなどの知識も必要になります。
ASP.NET Coreは複数のOSで動作し、クラウドやLinuxサーバーへの配置にも利用できます。Webサービスや業務システムを作りたい人にとって重要なC#プロジェクトです。
4-5. クラスライブラリとは
クラスライブラリは、ほかのプロジェクトから利用する機能をまとめるためのプロジェクトです。通常は単独で起動せず、コンソールアプリやWebアプリなどから参照して使います。
たとえば、税込価格を計算する処理をライブラリにまとめられます。
namespace Shop.Core;public class PriceCalculator{public decimal AddTax(decimal price, decimal taxRate){return price * (1 + taxRate);}}
複数のアプリで同じ処理を使いたい場合や、画面処理と業務処理を分離したい場合に役立ちます。
4-6. 初心者はどのC#プロジェクトを選ぶべきか
C#の文法を学ぶことが目的なら、最初はコンソールアプリを選びましょう。
コンソールアプリで次の内容を順番に学ぶと、ほかのC#プロジェクトへ進みやすくなります。
文字の表示と入力
変数とデータ型
条件分岐
繰り返し処理
配列とコレクション
メソッド
クラスとインスタンス
例外処理
ファイル操作
その後、作りたいものに合わせてWindowsフォーム、WPF、ASP.NET Coreなどを選択します。
5. ソリューションとプロジェクトの違い
5-1. ソリューションとは何か
ソリューションとは、1つ以上のC#プロジェクトをまとめてVisual Studioで管理するための単位です。
ソリューション自体がアプリとして実行されるわけではありません。関連するプロジェクトを整理し、一括で開いたりビルドしたりするために使われます。
Visual Studioのソリューションエクスプローラーでは、ソリューションの下に複数のプロジェクトが表示されます。
5-2. プロジェクトとは何か
プロジェクトは、実際にビルドされるアプリやライブラリの単位です。
プロジェクトごとに.csprojファイルがあり、次のような情報を管理します。
プロジェクトの種類
ターゲットフレームワーク
使用するNuGetパッケージ
ほかのプロジェクトへの参照
ビルドに関する設定
コンソールアプリのプロジェクトをビルドすると、実行可能なプログラムが生成されます。クラスライブラリをビルドすると、ほかのプロジェクトから参照できるライブラリが生成されます。
5-3. 1つのソリューションに複数プロジェクトを入れる理由
ある程度大きなアプリでは、機能や責任ごとにプロジェクトを分割します。
たとえば、顧客管理システムを次のように分けられます。
CustomerManagement.sln├─ CustomerManagement.Web├─ CustomerManagement.Application├─ CustomerManagement.Domain├─ CustomerManagement.Infrastructure└─ CustomerManagement.Tests分割する主な理由は次のとおりです。
画面と業務処理を分離できる
共通機能を複数のアプリから再利用できる
テストコードを本体から分離できる
プロジェクトごとの役割が明確になる
不要な依存関係を減らせる
チームで分担しやすくなる
ただし、小さな学習用アプリを無理に分割する必要はありません。最初は1つのプロジェクトから始め、必要になった段階で分けるのが現実的です。
5-4. .slnファイルの役割
.slnファイルは、Visual Studioのソリューション情報を保存するファイルです。
主に次の情報が記録されます。
ソリューションに含まれるプロジェクト
各プロジェクトの場所
ビルド構成
プロジェクト間の関係
ソリューションの構成情報
通常はVisual Studioが自動的に管理するため、初心者がテキストエディターで直接編集する必要はありません。
ソリューションをVisual Studioで開くときは、.slnファイルをダブルクリックする方法が一般的です。
5-5. 初心者が混同しやすい具体例
1つのコンソールアプリを作成した場合、次のような構成になります。
SampleApp├─ SampleApp.sln└─ SampleApp├─ SampleApp.csproj└─ Program.cs同じSampleAppという名前が複数表示されるため、混乱しやすい点に注意してください。
それぞれの意味は次のとおりです。
外側の
SampleApp:保存用フォルダSampleApp.sln:ソリューションファイル内側の
SampleApp:プロジェクトフォルダSampleApp.csproj:プロジェクト設定ファイルProgram.cs:C#のソースファイル
Visual Studioの設定や作成方法によってフォルダ構成は多少異なりますが、基本的な役割は同じです。
6. .csprojファイルとは?C#プロジェクトの中身を理解する
6-1. .csprojファイルの役割
.csprojは、C#プロジェクトの設定を記録する重要なファイルです。XML形式で記述されています。
コンソールアプリでは、次のような内容になります。
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net8.0</TargetFramework><ImplicitUsings>enable</ImplicitUsings><Nullable>enable</Nullable></PropertyGroup>
</Project>
実際のTargetFrameworkの値は、プロジェクト作成時に選択した.NETのバージョンによって異なります。
主な設定の意味は次のとおりです。
OutputType:生成物の種類TargetFramework:対象とする.NETImplicitUsings:よく使う名前空間を自動的に読み込む設定Nullable:null許容参照型のチェック設定
Visual Studioでは、プロジェクトを右クリックしてプロジェクトファイルの編集画面を開けます。
6-2. TargetFrameworkとは
TargetFrameworkは、そのC#プロジェクトがどの.NETを対象にするかを指定する項目です。
<TargetFramework>net8.0</TargetFramework>この指定により、利用できるAPIや必要な実行環境が決まります。
複数のフレームワークを対象にするライブラリでは、TargetFrameworksを使う場合があります。
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>ただし、複数ターゲットは管理が複雑になるため、初心者の学習用プロジェクトでは通常1つのターゲットで十分です。
6-3. NuGetパッケージ情報の見方
NuGetは、.NET向けライブラリを追加・管理する仕組みです。追加したパッケージは、.csproj内にPackageReferenceとして記録されます。
<ItemGroup><PackageReference Include="Newtonsoft.Json" Version="13.0.3" /></ItemGroup>この例では、Newtonsoft.Jsonというパッケージと、そのバージョンが指定されています。
パッケージを利用するプロジェクトを別のパソコンで開いた場合でも、.csprojの情報をもとに必要なパッケージを復元できます。そのため、通常はダウンロードされたパッケージ本体をGitへ登録する必要はありません。
6-4. 参照設定と依存関係の仕組み
C#プロジェクトから別のプロジェクトを利用する場合は、プロジェクト参照を追加します。
.csprojでは次のように記録されます。
<ItemGroup><ProjectReference Include="..\Shop.Core\Shop.Core.csproj" /></ItemGroup>この設定があると、現在のプロジェクトからShop.Coreの公開クラスやメソッドを使用できます。
参照する側と参照される側を整理すると、次のようになります。
Shop.Web↓ 参照Shop.CoreShop.WebはShop.Coreを利用できますが、逆方向の参照がなければ、Shop.CoreからShop.Webの機能は利用できません。
プロジェクト同士がお互いを参照する循環参照は設定できないため、依存関係の向きを意識する必要があります。
6-5. .csprojは初心者でも編集する必要があるのか
基本的な学習段階では、.csprojを直接編集する機会は多くありません。Visual Studioのプロジェクト設定画面やNuGet管理画面を使えば、多くの設定を変更できます。
ただし、次のような場面では直接編集することがあります。
特定のビルド設定を追加する
複数のターゲットフレームワークを指定する
ファイルのコピー条件を設定する
条件付きでパッケージを参照する
詳細なコンパイル設定を変更する
編集前には、Gitにコミットするか、ファイルのコピーを取っておくと安全です。XMLの開始タグと終了タグが対応しなくなると、プロジェクトを正しく読み込めなくなることがあります。
7. C#プロジェクトのフォルダ構成と主要ファイル
7-1. Program.csの役割
Program.csは、主にアプリの開始処理を記述するファイルです。
現在の一般的なコンソールアプリでは、トップレベルステートメントを使った簡潔なコードが生成されます。
Console.WriteLine("Hello, World!");従来形式では、Mainメソッドを明示します。
namespace SampleApp;internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");}}
どちらもアプリの開始地点として機能します。トップレベルステートメントは記述量が少ないため、小規模なプログラムや学習用コードに便利です。
7-2. binフォルダとobjフォルダの違い
C#プロジェクトをビルドすると、binフォルダとobjフォルダが自動生成されます。
binフォルダには、ビルドによって完成した実行ファイルやライブラリが保存されます。
bin└─ Debug└─ net8.0objフォルダには、ビルド途中で使用する一時ファイルや中間生成物が保存されます。
通常、どちらも開発者が直接編集する必要はありません。削除しても再ビルド時に生成されます。ビルド結果がおかしい場合に、Visual Studioの「クリーン」を実行したり、Visual Studioを閉じてからこれらのフォルダを削除したりすることがあります。
7-3. Propertiesフォルダとは
Propertiesフォルダには、プロジェクトの実行や公開に関する設定が保存されることがあります。
ASP.NET Coreプロジェクトでは、次のようなファイルが含まれる場合があります。
Properties└─ launchSettings.jsonlaunchSettings.jsonには、ローカル開発時に使用するURL、環境変数、起動方法などが設定されます。
Windows向けプロジェクトでは、アプリのリソースや設定に関連するファイルが配置されることもあります。プロジェクト種類によって中身が異なる点を覚えておきましょう。
7-4. appsettings.jsonが使われるケース
appsettings.jsonは、主にASP.NET Coreや.NETアプリで設定値を管理するために使われます。
{"ConnectionStrings": {"DefaultConnection": "Server=localhost;Database=SampleDb"},"Logging": {"LogLevel": {"Default": "Information"}}}環境別に設定を分ける場合は、次のようなファイルを使用します。
appsettings.jsonappsettings.Development.jsonappsettings.Production.jsonパスワードやAPIキーなどの秘密情報を、そのままappsettings.jsonへ書いてGitに登録するのは避けましょう。開発環境ではシークレット管理機能を使い、本番環境では環境変数や専用の秘密情報管理サービスを利用します。
7-5. 不要に触らないほうがよいファイル
初心者は、次のファイルやフォルダを目的なく編集しないほうが安全です。
.slnファイルbinフォルダ内のファイルobjフォルダ内のファイル自動生成されたコード
IDE固有の設定フォルダ
パッケージ復元によって生成されたファイル
これらを変更すると、一時的には動作しても、再ビルド時に上書きされる可能性があります。
コードを追加するときは、基本的にプロジェクト内へ新しい.csファイルを作成します。設定を変える場合も、まずVisual Studioの設定画面から変更できないか確認しましょう。
8. コマンドラインでC#プロジェクトを作成する方法
8-1. dotnet newコマンドとは
dotnet newは、.NETのプロジェクトやファイルをテンプレートから作成するコマンドです。
利用できるテンプレート一覧は、次のコマンドで確認できます。
dotnet new list代表的なテンプレートの短縮名には、次のようなものがあります。
| テンプレート | 短縮名 |
| コンソールアプリ | console |
| クラスライブラリ | classlib |
| Web API | webapi |
| Razor Pages | webapp |
| ソリューション | sln |
| xUnitテスト | xunit |
利用できるテンプレートは、インストールされている.NET SDKや追加テンプレートによって異なります。
8-2. コンソールアプリを作成するコマンド例
SampleAppというC#プロジェクトを作るには、次のコマンドを実行します。
dotnet new console -n SampleApp作成されたフォルダへ移動します。
cd SampleAppカレントフォルダ自体をプロジェクトとして使用する場合は、次のように操作できます。
mkdir SampleAppcd SampleAppdotnet new consoleソリューションも作成する場合は、親フォルダで次のように実行します。
dotnet new sln -n SampleSolutiondotnet sln SampleSolution.sln add SampleApp/SampleApp.csprojこれで、SampleAppプロジェクトがSampleSolutionソリューションに登録されます。
8-3. dotnet runで実行する方法
プロジェクトフォルダで次のコマンドを実行すると、C#プロジェクトをビルドして実行できます。
dotnet run別の場所からプロジェクトを指定して実行する場合は、--projectを使用します。
dotnet run --project SampleApp/SampleApp.csprojdotnet runは、コードを変更しながら動作確認するときに便利です。
8-4. dotnet buildでビルドする方法
プロジェクトを実行せず、ビルドだけ行う場合は次のコマンドを使用します。
dotnet buildソリューション全体をビルドする場合は、.slnファイルを指定します。
dotnet build SampleSolution.slnビルド構成をReleaseにする場合は、次のように指定します。
dotnet build --configuration Release通常の開発中はDebug構成、本番向けの成果物を作る場合はRelease構成を使用します。
8-5. Visual Studioなしで開発するメリット・デメリット
.NET SDKがあれば、Visual Studioを使わずにC#プロジェクトを作成できます。
メリットは次のとおりです。
軽量なエディターを選べる
macOSやLinuxでも開発しやすい
コマンド操作を自動化しやすい
ビルドの仕組みを理解しやすい
サーバーやCI環境でも同じコマンドを使える
一方、デメリットもあります。
コマンド操作の知識が必要
初心者には設定内容がわかりにくい
GUIデザイナーを利用しにくい場合がある
デバッグ環境を自分で整える必要がある
拡張機能の設定が必要になることがある
C#の学習を始めたばかりならVisual Studioを使い、慣れてからdotnetコマンドを覚える方法が効率的です。
9. C#プロジェクトにファイルや機能を追加する方法
9-1. 新しいクラスを追加する
Visual Studioでクラスを追加するには、ソリューションエクスプローラーでプロジェクトを右クリックし、「追加」「クラス」の順に選択します。
たとえば、Product.csを追加します。
namespace ShopApp;public class Product{public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
追加したクラスは、同じプロジェクト内のほかのコードから利用できます。
Product product = new(){Name = "キーボード",Price = 5000};Console.WriteLine($"{product.Name}: {product.Price}円");
クラス名とファイル名を同じにすると、目的のコードを見つけやすくなります。
9-2. フォルダを作成してコードを整理する
ファイルが増えてきたら、役割ごとにフォルダを作成します。
ShopApp├─ Models│ └─ Product.cs├─ Services│ └─ ProductService.cs├─ Utilities│ └─ FileHelper.cs└─ Program.csよく使われるフォルダ名には、次のようなものがあります。
Models:データを表すクラスServices:業務処理や外部連携Repositories:データ保存や取得Controllers:Webリクエストの処理Views:画面表示Utilities:補助機能Interfaces:インターフェース
ただし、ファイルが数個しかない段階で細かく分けすぎると、かえって探しにくくなります。必要になった時点で整理しましょう。
9-3. NuGetパッケージを追加する
Visual Studioでは、プロジェクトを右クリックし、「NuGetパッケージの管理」からパッケージを検索して追加できます。
コマンドラインでは、次の形式で追加します。
dotnet add package パッケージ名例として、Newtonsoft.Jsonを追加する場合は次のように実行します。
dotnet add package Newtonsoft.Json追加後は.csprojにパッケージ情報が記録されます。
NuGetパッケージを選ぶときは、次の点を確認してください。
目的に合っているか
対象の.NETに対応しているか
継続的にメンテナンスされているか
ライセンスに問題がないか
不必要に多くの依存パッケージを持っていないか
安全性に関する警告が出ていないか
9-4. 別プロジェクトを参照する
Visual Studioで別プロジェクトを参照するには、参照元プロジェクトの「依存関係」または「参照」を右クリックし、プロジェクト参照を追加します。
コマンドラインでは次のように指定します。
dotnet add Shop.Web/Shop.Web.csproj reference Shop.Core/Shop.Core.csproj参照を追加すると、Shop.WebからShop.Coreの公開クラスを利用できます。
参照されるクラスやメソッドには、必要に応じてpublicを指定します。
public class OrderService{public void CreateOrder(){// 注文作成処理}}internalのクラスは、原則として別プロジェクトから直接利用できません。
9-5. Gitでプロジェクトを管理する
Gitを使うと、C#プロジェクトの変更履歴を保存できます。コードを誤って変更した場合に以前の状態へ戻したり、複数人で共同開発したりできます。
プロジェクトのルートフォルダで次のコマンドを実行します。
git initgit add .git commit -m "Initial commit"C#プロジェクトでは、bin、obj、Visual Studio固有の一時ファイルなどをGitの管理対象から除外します。その設定を記述するのが.gitignoreです。
代表的な除外対象は次のとおりです。
bin/obj/.vs/秘密情報、パスワード、APIキー、接続文字列をGitへ登録しないことも重要です。
10. C#プロジェクト作成後によくあるエラーと対処法
10-1. プロジェクトが実行できない
Visual Studioで実行できない場合は、最初にスタートアッププロジェクトを確認します。
複数プロジェクトがあるソリューションでは、実行対象のプロジェクトを右クリックし、「スタートアッププロジェクトに設定」を選択します。
また、クラスライブラリは単独で実行できません。クラスライブラリを選択している場合は、それを利用するコンソールアプリやWebアプリを実行対象に設定します。
確認項目は次のとおりです。
実行可能なプロジェクトを選択しているか
ビルドエラーが発生していないか
正しいプロジェクト構成になっているか
必要な.NETがインストールされているか
実行ファイルがセキュリティソフトに妨げられていないか
10-2. .NET SDKが見つからない
.NET SDKが見つからない場合は、次のコマンドを実行します。
dotnet --infoコマンド自体が認識されない場合は、.NET SDKがインストールされていないか、環境変数の設定が反映されていない可能性があります。
SDK一覧も確認します。
dotnet --list-sdksプロジェクトが要求するバージョンと、インストール済みのSDKが一致しているか確認してください。
SDKをインストールした直後は、Visual Studio、Visual Studio Code、ターミナルを一度終了して起動し直すと認識されることがあります。
10-3. 参照エラーが発生する
「型または名前空間が見つからない」と表示される場合は、次の点を確認します。
必要な
usingが記述されているか対象クラスが
publicになっているかプロジェクト参照が追加されているか
NuGetパッケージが追加されているか
クラス名や名前空間に入力ミスがないか
参照先プロジェクトが正常にビルドできるか
ターゲットフレームワークに互換性があるか
たとえば、別の名前空間にあるクラスを使用する場合は、ファイル先頭にusingを追加します。
using Shop.Core.Services;完全修飾名を使って確認する方法もあります。
var service = new Shop.Core.Services.OrderService();10-4. NuGetパッケージの復元に失敗する
NuGetパッケージの復元に失敗した場合は、次のコマンドを試します。
dotnet restore改善しない場合は、次の点を確認してください。
インターネットへ接続できるか
NuGetのパッケージソースが正しいか
指定したパッケージバージョンが存在するか
プロキシやファイアウォールに妨げられていないか
対象フレームワークに対応しているか
認証が必要な社内パッケージソースではないか
キャッシュに問題がある場合は、NuGetのローカルキャッシュをクリアしてから復元すると改善することがあります。
dotnet nuget locals all --cleardotnet restore10-5. ビルドエラーが解決できないときの確認ポイント
ビルドエラーが出たら、エラー一覧の先頭から確認します。後続のエラーは、最初の1件が原因で連鎖的に発生していることがあるためです。
次の順番で確認すると効率的です。
エラーメッセージを最後まで読む
対象のファイル名と行番号を確認する
最初のエラーから修正する
スペルや大文字・小文字を確認する
括弧やセミコロンの不足を確認する
参照とNuGetパッケージを確認する
プロジェクトを保存して再ビルドする
クリーン後に再ビルドする
変更前との差分をGitで確認する
Visual Studioでは、エラー項目をダブルクリックすると該当行へ移動できます。エラーコードが表示されている場合は、そのコードも原因を調べる手掛かりになります。
11. 初心者がC#プロジェクトを作るときのベストプラクティス
11-1. プロジェクト名はわかりやすく付ける
プロジェクト名には、そのプロジェクトの役割が伝わる名前を付けましょう。
TaskManager.ConsoleTaskManager.CoreTaskManager.WebTaskManager.Testsこのように共通のシステム名と役割を組み合わせると、複数プロジェクトでも関係を把握しやすくなります。
名前を付けるときは、次の点を意識します。
内容を想像できる
長すぎない
表記方法を統一する
一時的な名前を避ける
既存のクラス名や名前空間と混乱しにくい
プロジェクト名は既定の名前空間にも使われるため、作成時に慎重に決めることが大切です。
11-2. 保存場所を固定する
C#プロジェクトの保存先を固定すると、バックアップやGit管理が簡単になります。
たとえば、次のようなフォルダを用意します。
C:\Development\CSharp学習用と実務用を分ける場合は、さらに分類できます。
C:\Development├─ Learning├─ Personal└─ Workデスクトップやダウンロードフォルダへ無計画に保存すると、必要なファイルを誤って削除したり、プロジェクトの場所がわからなくなったりします。
クラウド同期フォルダへ保存する場合は、ビルド中のファイルが同期処理と競合する可能性にも注意してください。
11-3. 最初はコンソールアプリから始める
初心者が最初からWebアプリや複雑なデスクトップアプリに挑戦すると、C#以外の要素でつまずきやすくなります。
コンソールアプリなら、次のような余計な要素を最小限にできます。
画面レイアウト
Webサーバー
HTMLやCSS
データバインディング
複雑なフレームワーク設定
まずコンソールアプリでC#の文法とデバッグ操作を覚え、その後に目的に合ったプロジェクトへ進みましょう。
11-4. ファイル構成をむやみに変更しない
プロジェクト作成直後は、テンプレートが用意した構成をそのまま使うのがおすすめです。
インターネット上の記事を参考にして大量のフォルダや設定を追加しても、それぞれの役割を理解できなければ管理が難しくなります。
変更するときは、次の点を説明できる状態にします。
なぜそのフォルダが必要なのか
どのコードを配置するのか
既存の構成では何が問題なのか
変更後もビルドできるか
変更を元に戻せるか
構成を変える前にGitへコミットしておけば、問題が起きたときに戻しやすくなります。
11-5. 小さく作って実行しながら学ぶ
C#プロジェクトは、最初から大量のコードを書くのではなく、小さな単位で実行しながら作りましょう。
おすすめの流れは次のとおりです。
プロジェクトを作成する
初期状態で実行する
1か所だけコードを変更する
もう一度実行する
問題なければ次の機能を追加する
区切りごとにGitへコミットする
たとえば計算アプリを作る場合も、最初は固定値の足し算から始めます。
int result = 10 + 20;Console.WriteLine(result);次に入力機能を追加し、その後で引き算や掛け算へ広げます。小さく確認することで、エラーが発生した場所を特定しやすくなります。
12. C#プロジェクトに関するよくある質問
12-1. C#プロジェクトとC#ファイルの違いは?
C#ファイルは、.csという拡張子を持つ個別のソースコードです。C#プロジェクトは、そのC#ファイルや設定、参照情報をまとめた単位です。
たとえるなら、C#ファイルが1枚の書類で、C#プロジェクトが関連書類をまとめるファイルケースです。
簡単なコードは1つの.csファイルだけでも記述できますが、通常のアプリ開発では.csprojを含むプロジェクトとして管理します。
12-2. Visual StudioなしでC#プロジェクトは作れる?
Visual Studioがなくても、.NET SDKがインストールされていればC#プロジェクトを作成できます。
dotnet new console -n SampleAppcd SampleAppdotnet runコード編集には、Visual Studio Codeやほかのテキストエディターを利用できます。
ただし、初心者にとってはプロジェクト作成、デバッグ、NuGet管理などを画面上で行えるVisual Studioのほうが簡単です。
12-3. .csprojファイルを削除するとどうなる?
.csprojファイルを削除すると、そのフォルダを正常なC#プロジェクトとしてビルドできなくなります。
ソースコードである.csファイルが残っていても、次の情報が失われるためです。
ターゲットフレームワーク
プロジェクト種類
NuGetパッケージ
プロジェクト参照
ビルド設定
誤って削除した場合は、Gitやバックアップから復元するのが最も確実です。復元できない場合は、新しいプロジェクトを作り、既存の.csファイルを移す方法があります。
12-4. ソリューションは必ず必要?
C#プロジェクトのビルドや実行に、ソリューションが必ず必要というわけではありません。
.csprojファイルがあれば、次のようにプロジェクト単体で操作できます。
dotnet build SampleApp.csprojdotnet run --project SampleApp.csprojただし、Visual Studioで複数プロジェクトをまとめて管理する場合や、ソリューション全体を一括ビルドする場合には.slnが便利です。
学習用の小さなプロジェクトでも、Visual Studioが自動生成したソリューションはそのまま使って問題ありません。
12-5. 初心者はどのテンプレートを選べばいい?
C#の基礎を学びたい初心者は、「コンソールアプリ」を選びましょう。
コンソールアプリなら、画面作成やWeb設定を気にせず、C#コードの動きに集中できます。
目的別の選び方は次のとおりです。
| 目的 | おすすめのテンプレート |
| C#の基本文法を学ぶ | コンソールアプリ |
| Windows画面を作る | Windowsフォームアプリ |
| 高機能なWindows画面を作る | WPFアプリケーション |
| Webサイトを作る | ASP.NET Core Webアプリ |
| Web APIを作る | ASP.NET Core Web API |
| 共通機能を作る | クラスライブラリ |
| テストを書く | テストプロジェクト |
迷った段階ではコンソールアプリを選び、変数、条件分岐、繰り返し、メソッド、クラスを一通り学んでから次のテンプレートへ進むのが効率的です。
まとめ
C#プロジェクトは、ソースコードだけでなく、使用する.NET、外部ライブラリ、参照関係、ビルド設定などをまとめて管理する単位です。
C#開発に登場する主な要素は、次のように整理できます。
.csファイル:個別のC#コード.csprojファイル:プロジェクトの設定プロジェクト:アプリやライブラリのビルド単位
.slnファイル:ソリューションの管理情報ソリューション:複数のプロジェクトをまとめる単位
.NET SDK:作成、ビルド、実行に必要な開発ツール
Windowsで初めてC#プロジェクトを作る場合は、Visual Studioをインストールし、コンソールアプリのテンプレートから始める方法がおすすめです。作成したら、まず初期コードを実行し、少しずつ書き換えながらC#の仕組みを理解していきましょう。
プロジェクトの規模が大きくなったら、クラスの追加、フォルダ分け、NuGetパッケージ、プロジェクト参照、Gitによる履歴管理を段階的に取り入れます。
最初から複雑な構成を目指す必要はありません。小さなC#プロジェクトを作り、実行と修正を繰り返すことが、Visual Studioやソリューション、.csprojへの理解を深める最も確実な方法です。

