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.WebShop.Coreがプロジェクト、その中の.csファイルが個別のソースコードです。

初心者が小さなプログラムを作る場合は、1つのソリューションに1つのプロジェクトが入っている構成でも問題ありません。

1-3. C#プロジェクトで作れるアプリの種類

C#プロジェクトでは、さまざまな種類のアプリケーションを作成できます。

代表的なものは次のとおりです。

  • 文字を入出力するコンソールアプリ

  • Windows向けのデスクトップアプリ

  • WebサイトやWeb API

  • クラスや機能をまとめたライブラリ

  • 自動テスト用のプロジェクト

  • クラウド上で動作するサービス

  • ゲーム開発で使用するロジック

  • バッチ処理や業務用ツール

作りたいものによって選択するプロジェクトテンプレートが異なります。テンプレートを正しく選ぶと、必要な設定や基本ファイルが自動的に作成されるため、すぐに開発を始められます。

1-4. 初心者が「C#プロジェクト」でつまずきやすいポイント

初心者がつまずきやすいのは、プロジェクトとソースファイルを同じものだと考えてしまうことです。

C#コード自体は.csファイルに記述しますが、そのファイルをどのようにビルドするかはプロジェクト側で管理します。そのため、.csファイルだけを別の場所へコピーしても、参照しているライブラリや設定が不足し、正常に動作しないことがあります。

ほかにも、次のような点で迷いやすくなります。

  • テンプレートが多く、どれを選べばよいかわからない

  • プロジェクト名とソリューション名の違いがわからない

  • .NET.NET Frameworkの違いがわからない

  • binobjなどのフォルダが自動生成される

  • 実行時に複数のプロジェクトから選択を求められる

  • .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 StudioVisual Studio Code
種類統合開発環境コードエディター
C#開発機能標準で充実拡張機能で追加
プロジェクト作成画面操作が中心コマンド操作も使用
動作比較的重い比較的軽い
対応OS主にWindowsWindows、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環境が必要です。

プロジェクト種類WindowsmacOSLinux
コンソールアプリ
ASP.NET Core
クラスライブラリ
Windowsフォーム原則不可原則不可
WPF原則不可原則不可

複数のOSで動かしたいアプリを作る場合は、対象技術がクロスプラットフォームに対応しているか確認しましょう。

2-5. 初心者におすすめの開発環境

Windowsを使用している初心者には、Visual Studio Communityと.NETの組み合わせがおすすめです。

Visual Studio Communityは、個人学習や条件を満たす開発用途で利用でき、C#プロジェクトの作成からデバッグまでを画面上で行えます。設定の多くが自動化されているため、プログラミングそのものに集中しやすい環境です。

おすすめの学習手順は次のとおりです。

  1. Visual Studioをインストールする

  2. 「.NETデスクトップ開発」を選択する

  3. コンソールアプリを作成する

  4. コードを書き換えて実行する

  5. ブレークポイントを使ってデバッグする

  6. 慣れてからWebアプリやデスクトップアプリに進む

Visual Studio Codeから始める場合は、ファイル操作やターミナルの基本もあわせて覚える必要があります。

3. Visual StudioでC#プロジェクトを作成する手順

3-1. Visual Studioを起動して新しいプロジェクトを作成する

Visual StudioでC#プロジェクトを作成する基本手順は次のとおりです。

  1. Visual Studioを起動する

  2. スタート画面で「新しいプロジェクトの作成」を選択する

  3. 使用するプロジェクトテンプレートを選択する

  4. 「次へ」を選択する

  5. プロジェクト名や保存場所を入力する

  6. 使用するフレームワークなどを設定する

  7. 「作成」を選択する

すでにVisual Studioで別のプロジェクトを開いている場合は、メニューから「ファイル」「新規作成」「プロジェクト」の順に選択して作成できます。

3-2. プロジェクトテンプレートの選び方

新しいプロジェクトの作成画面では、言語、プラットフォーム、プロジェクトの種類でテンプレートを絞り込めます。

C#プロジェクトを探す場合は、言語の絞り込みで「C#」を選びます。そのうえで、作りたいアプリに対応するテンプレートを選択します。

作りたいもの主なテンプレート
C#の基本を学びたいコンソールアプリ
Windows用の業務画面Windowsフォームアプリ
柔軟なWindows画面WPFアプリケーション
WebサイトASP.NET Core Webアプリ
Web APIASP.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#プロジェクトへ進みやすくなります。

  1. 文字の表示と入力

  2. 変数とデータ型

  3. 条件分岐

  4. 繰り返し処理

  5. 配列とコレクション

  6. メソッド

  7. クラスとインスタンス

  8. 例外処理

  9. ファイル操作

その後、作りたいものに合わせて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:対象とする.NET

  • ImplicitUsings:よく使う名前空間を自動的に読み込む設定

  • 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.Core

Shop.WebShop.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.0

objフォルダには、ビルド途中で使用する一時ファイルや中間生成物が保存されます。

通常、どちらも開発者が直接編集する必要はありません。削除しても再ビルド時に生成されます。ビルド結果がおかしい場合に、Visual Studioの「クリーン」を実行したり、Visual Studioを閉じてからこれらのフォルダを削除したりすることがあります。

7-3. Propertiesフォルダとは

Propertiesフォルダには、プロジェクトの実行や公開に関する設定が保存されることがあります。

ASP.NET Coreプロジェクトでは、次のようなファイルが含まれる場合があります。

Properties└─ launchSettings.json

launchSettings.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 APIwebapi
Razor Pageswebapp
ソリューション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.csproj

dotnet 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#プロジェクトでは、binobj、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 restore

10-5. ビルドエラーが解決できないときの確認ポイント

ビルドエラーが出たら、エラー一覧の先頭から確認します。後続のエラーは、最初の1件が原因で連鎖的に発生していることがあるためです。

次の順番で確認すると効率的です。

  1. エラーメッセージを最後まで読む

  2. 対象のファイル名と行番号を確認する

  3. 最初のエラーから修正する

  4. スペルや大文字・小文字を確認する

  5. 括弧やセミコロンの不足を確認する

  6. 参照とNuGetパッケージを確認する

  7. プロジェクトを保存して再ビルドする

  8. クリーン後に再ビルドする

  9. 変更前との差分を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. プロジェクトを作成する

  2. 初期状態で実行する

  3. 1か所だけコードを変更する

  4. もう一度実行する

  5. 問題なければ次の機能を追加する

  6. 区切りごとに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への理解を深める最も確実な方法です。