C#の拡張子は「.cs」だけ?初心者が迷いやすい関連ファイルと使い分けを解説
はじめに
C#を学び始めたとき、「C#のファイルにはどの拡張子を付ければよいのか」「.csprojや.cshtmlもC#の拡張子なのか」と迷う人は少なくありません。
C#のソースコードを保存する基本的な拡張子は、**「.cs」**です。ただし、実際のC#開発では、プロジェクト設定や画面レイアウト、リソース、アプリケーション設定などを管理するために、さまざまな拡張子のファイルを使用します。
この記事では、C#の基本的な拡張子である.csの役割をはじめ、.csprojや.sln、.cshtml、.xamlなど、初心者が混同しやすい関連ファイルとの違いを解説します。
1. C#の基本的な拡張子は「.cs」
C#でプログラムを書くとき、ソースコードを保存するファイルの拡張子には、基本的に**「.cs」**を使用します。
たとえば、次のようなファイル名です。
Program.csSample.csUserService.csMainWindow.cs
.csは、C#の英語表記である「C Sharp」に由来する拡張子です。
1-1. 「.cs」はC#のソースコードを保存するファイル
.csファイルは、C#で記述したソースコードを保存するためのテキストファイルです。
たとえば、コンソールに文字を表示するコードは、次のように記述します。
Console.WriteLine("Hello, C#!");このコードをProgram.csなどの名前で保存し、コンパイラによってビルドすると、コンピューターが実行できる形式に変換されます。
.csファイル自体は一般的なテキストファイルであるため、特別なバイナリ形式ではありません。対応するエディターを使えば、内容をそのまま確認・編集できます。
1-2. .csファイルに記述される主な内容
.csファイルには、C#プログラムを構成するさまざまな要素を記述します。
主な内容は次のとおりです。
クラス
メソッド
プロパティ
フィールド
インターフェイス
列挙型
構造体
名前空間
プログラムの処理内容
たとえば、商品情報を表すクラスは次のように記述できます。
public class Product{public string Name { get; set; } = string.Empty;public decimal Price { get; set; }public void Display(){Console.WriteLine($"{Name}: {Price}円");}
}
C#では、1つの.csファイルに複数のクラスを記述することも可能です。ただし、ソースコードを管理しやすくするため、一般的には1つの主要なクラスにつき1つの.csファイルを用意します。
1-3. .csファイルの名前の付け方と具体例
.csファイルの名前に厳密な決まりはありませんが、通常はファイル内に記述するクラスや役割に合わせて命名します。
たとえば、Customerクラスを記述する場合は、ファイル名をCustomer.csにします。
public class Customer{public string Name { get; set; } = string.Empty;}よく使われるファイル名の例は次のとおりです。
| ファイル名 | 主な役割 |
|---|---|
Program.cs | アプリケーションの開始処理 |
Customer.cs | 顧客を表すクラス |
ProductService.cs | 商品に関する処理 |
MainWindow.cs | メイン画面の処理 |
AppSettings.cs | 設定情報を保持するクラス |
C#では、クラス名やファイル名をパスカルケースで記述するのが一般的です。パスカルケースとは、ProductServiceのように、単語の先頭を大文字にする命名方法です。
1-4. .csファイルを開く・編集する方法
.csファイルはテキストファイルなので、メモ帳などでも開けます。ただし、効率よくC#を開発するには、プログラミング向けのエディターや統合開発環境を使用するのがおすすめです。
代表的なツールには、次のようなものがあります。
Visual Studio
Visual Studio Code
JetBrains Rider
その他のテキストエディター
Visual Studioでは、コードの色分け、入力補完、エラーの検出、デバッグ、ビルドなどを1つの画面で行えます。C#を初めて学ぶ場合は、必要な開発機能をまとめて利用できるVisual Studioが便利です。
Windowsで拡張子が表示されない場合は、エクスプローラーの設定で「ファイル名拡張子」を表示してください。拡張子が非表示になっていると、Program.cs.txtを誤ってProgram.csだと思い込むことがあります。
2. C#の拡張子が「.cs」だけではないように見える理由
C#の基本的なソースファイルの拡張子は.csです。しかし、Visual StudioでC#のプロジェクトを作成すると、.cs以外のファイルも多数表示されます。
これは、C#の拡張子が複数あるというより、C#アプリケーションの開発に異なる役割のファイルが必要になるためです。
2-1. C#開発ではソースコード以外のファイルも使用する
アプリケーションを作るために必要なのは、ソースコードだけではありません。
実際の開発では、次のような情報も管理する必要があります。
使用する.NETのバージョン
外部ライブラリの情報
アプリケーションの設定値
画面のレイアウト
画像や文字列などのリソース
複数プロジェクトの構成
ビルド方法や出力形式
これらをすべて.csファイルに記述するのではなく、用途ごとに異なる形式のファイルへ分けて管理します。
2-2. 拡張子ごとに役割が異なる
C#プロジェクトに含まれるファイルは、拡張子によって役割が異なります。
たとえば、.csはC#のソースコード、.csprojはプロジェクト設定、.jsonは設定データ、.xamlは画面レイアウトを記述するためのファイルです。
| 拡張子 | 主な役割 |
.cs | C#のソースコード |
.csproj | C#プロジェクトの設定 |
.sln | 複数プロジェクトの管理 |
.json | 設定やデータの記述 |
.resx | 文字列や画像などのリソース |
.xaml | 画面レイアウトの定義 |
.cs以外のファイルが表示されても、そのすべてにC#コードが記述されているわけではありません。
2-3. Visual Studioが関連ファイルを自動生成する場合がある
Visual Studioで新しいプロジェクトや画面を作成すると、開発に必要なファイルが自動的に生成されます。
たとえば、Windows Formsでフォームを追加すると、次のようなファイルが作成される場合があります。
Form1.csForm1.Designer.csForm1.resx
これらは同じフォームに関連するファイルですが、それぞれ役割が異なります。
Form1.csには開発者が作成する処理を記述し、Form1.Designer.csには画面部品の配置に関するコードが自動生成されます。Form1.resxには、フォームで使用する画像や文字列などが保存されます。
3. C#プロジェクトで使う主な関連ファイルの拡張子
C#開発で頻繁に目にする関連ファイルについて、それぞれの役割を確認しましょう。
3-1. 「.csproj」:C#プロジェクトの設定ファイル
.csprojは、C#プロジェクトの構成や設定を記述するファイルです。「C Sharp Project」を意味します。
.csprojファイルには、主に次のような情報が含まれます。
対象となる.NETのバージョン
出力するアプリケーションの種類
使用するNuGetパッケージ
ビルドに関する設定
プロジェクトが参照する別のプロジェクト
内容はXML形式で記述されます。
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>Exe</OutputType><TargetFramework>net8.0</TargetFramework></PropertyGroup>
</Project>
通常、1つのC#プロジェクトに対して1つの.csprojファイルがあります。ソースコードそのものではありませんが、プロジェクトを正しくビルドするために重要なファイルです。
3-2. 「.sln」:複数のプロジェクトを管理するソリューションファイル
.slnは、Visual Studioのソリューションファイルです。
ソリューションとは、1つまたは複数のプロジェクトをまとめて管理する単位です。たとえば、大規模なアプリケーションでは、次のようにプロジェクトを分けることがあります。
Webアプリケーション本体
業務処理を担当するクラスライブラリ
データベースアクセス用ライブラリ
自動テスト用プロジェクト
これらの.csprojを1つの.slnファイルでまとめることで、Visual Studioから一括して開いたり、ビルドしたりできます。
なお、.slnはC#専用の拡張子ではありません。Visual Studioで扱うさまざまな種類のプロジェクトを管理できます。
3-3. 「.csx」:C#スクリプトを記述するファイル
.csxは、C#スクリプトを記述するための拡張子です。
一般的な.csファイルは、プロジェクトの一部としてコンパイルして使用します。一方、.csxファイルは、スクリプトとして対話的に実行したり、簡単な処理を試したりする用途で使われます。
var name = "C#";Console.WriteLine($"Hello, {name}!");.csxは、通常のC#プロジェクトではあまり見かけないこともあります。学習、検証、自動化処理など、比較的小規模なコードを実行するときに利用されます。
3-4. 「.resx」:文字列や画像などのリソースファイル
.resxは、アプリケーションで使用するリソースを管理するためのファイルです。
主に次のようなデータを保存します。
画面に表示する文字列
エラーメッセージ
アイコン
画像
音声などのデータ
特に、多言語対応を行うアプリケーションでは、言語ごとに異なる.resxファイルを用意し、表示する文字列を切り替えることがあります。
.resxの内容はXML形式ですが、通常はVisual Studioのリソースエディターを使って編集します。
3-5. 「.config」「.json」:アプリケーションの設定ファイル
C#アプリケーションでは、動作に必要な設定値を.configや.jsonファイルに保存することがあります。
従来の.NET Frameworkアプリケーションでは、次のようなファイルがよく使われます。
App.configWeb.config
一方、ASP.NET Coreなどの.NETアプリケーションでは、次のようなJSON形式の設定ファイルが一般的です。
appsettings.jsonappsettings.Development.json
appsettings.jsonの例は次のとおりです。
{"AppName": "Sample Application","Logging": {"LogLevel": {"Default": "Information"}}}設定ファイルへ接続先やパスワードなどの秘密情報をそのまま記述し、ソースコード管理サービスへ公開するのは危険です。機密情報は、環境変数やシークレット管理機能などを使って管理する必要があります。
4. C#の開発分野ごとに登場する拡張子
C#は、Webアプリケーション、デスクトップアプリケーション、モバイルアプリ、ゲームなど、幅広い分野で使われています。
開発分野によっては、.csに加えて専用の拡張子が登場します。
4-1. 「.cshtml」:ASP.NET CoreのRazorビュー
.cshtmlは、ASP.NET Core MVCやRazor Pagesなどで使用されるRazorファイルの拡張子です。
HTMLの中にC#の処理を埋め込み、Webページの表示内容を動的に生成できます。
@{var title = "商品一覧";}<h1>@title</h1>
.cshtmlにはHTMLとC#の両方を記述できますが、通常のC#ソースファイルである.csとは役割が異なります。
画面表示に関する処理は.cshtml、業務処理やデータ処理は.csへ分けることで、コードを管理しやすくなります。
4-2. 「.razor」:Blazorコンポーネント
.razorは、Blazorで画面を構成するコンポーネントを作成するための拡張子です。
Blazorは、C#を使って対話型のWebユーザーインターフェースを構築するためのフレームワークです。
<h1>カウンター</h1><p>現在の値: @count</p>
<button @onclick="IncrementCount">加算</button>
@code {private int count;
private void IncrementCount(){count++;}
}
.razorファイルでは、HTMLに近い画面記述とC#コードを組み合わせてコンポーネントを作成します。
規模が大きくなった場合は、C#コード部分を別の.csファイルへ分離することもできます。
4-3. 「.xaml」:WPFやMAUIの画面レイアウト
.xamlは、WPFや.NET MAUIなどで画面レイアウトを定義するために使われる拡張子です。
XAMLはXMLを基にしたマークアップ言語で、ボタンやテキストボックスなどの画面部品を記述します。
<StackPanel><TextBlock Text="名前" /><TextBox x:Name="NameTextBox" /><Button Content="送信" Click="SendButton_Click" /></StackPanel>画面の見た目は.xamlに記述し、ボタンをクリックしたときの処理などは、対応する.xaml.csファイルに記述するのが一般的です。
たとえば、次の2つのファイルが組み合わされます。
MainWindow.xamlMainWindow.xaml.cs
MainWindow.xaml.csの実際の拡張子は、末尾にある.csです。.xaml.cs全体で1つの拡張子になっているわけではありません。
4-4. 「.aspx」「.ascx」:従来のASP.NET Web Forms
.aspxと.ascxは、主に.NET FrameworkのASP.NET Web Formsで使用される拡張子です。
.aspxはWebページ、.ascxは複数のページで再利用できるユーザーコントロールを表します。
関連するC#コードは、コードビハインドと呼ばれる.csファイルに記述されることがあります。
たとえば、次のような組み合わせです。
Default.aspxDefault.aspx.csHeader.ascxHeader.ascx.cs
ASP.NET Web Formsは既存システムの保守で目にすることがありますが、新しいWebアプリケーションではASP.NET Coreなどが選択されることが一般的です。
4-5. Unity開発でもC#コードの拡張子は「.cs」
Unityでゲームを開発する場合も、C#のソースコードには.csを使用します。
たとえば、プレイヤーの動きを制御するスクリプトは、PlayerController.csなどの名前で作成します。
using UnityEngine;public class PlayerController : MonoBehaviour{private void Start(){Debug.Log("ゲームを開始しました");}}
UnityではC#ファイルを「スクリプト」と呼ぶことがありますが、拡張子は.csです。C#スクリプト用の.csxを使用するわけではありません。
また、Unityでは通常、ファイル名とMonoBehaviourを継承したクラス名を一致させます。
5. .csファイルと一緒に表示される特殊なファイル名
C#プロジェクトでは、単にSample.csという名前だけでなく、Program.csやForm1.Designer.cs、Sample.g.csなど、特別な意味を持つファイル名が登場します。
これらはすべて末尾が.csであるため、基本的にはC#のソースファイルです。ただし、ファイルごとに役割や編集方法が異なります。
5-1. 「Program.cs」:アプリケーションの開始地点
Program.csは、多くのC#プロジェクトでアプリケーションの開始処理を記述するファイルです。
従来の書き方では、Mainメソッドがプログラムのエントリーポイントになります。
public class Program{public static void Main(string[] args){Console.WriteLine("アプリケーションを開始します");}}新しい形式のC#プロジェクトでは、トップレベルステートメントによって、クラスやMainメソッドを省略できることがあります。
Console.WriteLine("アプリケーションを開始します");どちらの書き方でも、コンソールアプリケーションなどではProgram.csが処理の開始地点として使われます。
ただし、Program.csというファイル名自体がC#の文法で必須と決められているわけではありません。プロジェクトのテンプレートや慣習として使用されている名前です。
5-2. 「Form1.cs」と「Form1.Designer.cs」の違い
Windows Formsでは、1つのフォームに対して複数の.csファイルが作成されることがあります。
Form1.csには、ボタンをクリックしたときの処理など、開発者が記述するコードを保存します。
private void button1_Click(object sender, EventArgs e){MessageBox.Show("ボタンが押されました");}一方、Form1.Designer.csには、ボタンやラベルの生成、サイズ、位置など、画面デザイナーによって作られたコードが保存されます。
これらは部分クラスという仕組みによって、ビルド時に1つのForm1クラスとして扱われます。
5-3. 「〇〇.g.cs」「〇〇.generated.cs」:自動生成されたコード
.g.csや.generated.csという名前を含むファイルは、ツールやビルド処理によって自動生成されたC#コードであることを示す場合があります。
たとえば、次のような名前です。
MainWindow.g.csResources.Designer.csClient.generated.cs
.g.csの「g」は、一般的に「generated」を表します。
ただし、これは独立した拡張子ではありません。MainWindow.g.csの場合、実際の拡張子は最後の.csです。.gはファイルの性質を示すために名前へ追加されています。
生成元には、XAMLコンパイラ、コードジェネレーター、Web APIクライアント生成ツールなどがあります。
5-4. 「AssemblyInfo.cs」:アセンブリ情報を記述するファイル
AssemblyInfo.csは、アセンブリに関する情報を記述するためのC#ファイルです。
アセンブリとは、C#のソースコードをビルドして作成される.exeや.dllなどの単位です。
AssemblyInfo.csには、従来、次のような情報が記述されていました。
製品名
会社名
説明
バージョン
著作権情報
using System.Reflection;[assembly: AssemblyTitle("SampleApp")][assembly: AssemblyVersion("1.0.0.0")]
新しい形式の.NETプロジェクトでは、これらの情報が.csprojから自動生成されることがあります。そのため、プロジェクトによってはAssemblyInfo.csが表示されません。
5-5. 自動生成ファイルを直接編集してはいけない理由
Designer.cs、.g.cs、.generated.csなどの自動生成ファイルは、原則として直接編集しないようにします。
直接編集しても、画面デザイナーの保存時や次回のビルド時に、変更内容が上書きされる可能性があるためです。
また、自動生成されたコードを手作業で変更すると、生成元の設定とコードの内容が一致しなくなり、エラーの原因になることがあります。
処理を追加したい場合は、通常の.csファイル、部分クラス、設定ファイル、テンプレートなど、生成ツールが想定している方法を使用します。
ファイルの先頭に次のような注意書きがある場合は、特に注意が必要です。
// <auto-generated>// このコードはツールによって生成されました。// </auto-generated>6. C#をビルドした後に作成されるファイルの拡張子
.csファイルは、人が読み書きするソースコードです。そのままでは通常、完成したアプリケーションとして配布・実行できません。
C#プロジェクトをビルドすると、ソースコードがコンパイルされ、binフォルダーなどに実行用のファイルが作成されます。
6-1. 「.exe」:実行可能ファイル
.exeは、Windowsで使用される実行可能ファイルの拡張子です。
C#でコンソールアプリケーションやデスクトップアプリケーションを作成すると、ビルド結果として.exeファイルが生成される場合があります。
たとえば、プロジェクト名がSampleAppの場合、次のようなファイルが作成されます。
SampleApp.exeただし、C#のビルド結果は.exeだけとは限りません。プロジェクトの種類や公開方法によっては、次のようなファイルも生成されます。
.dll:プログラム本体や再利用可能なライブラリ.pdb:デバッグに使用する情報.deps.json:依存関係に関する情報.runtimeconfig.json:実行環境に関する設定
.NETアプリケーションでは、.dllをdotnetコマンドから実行する形式もあります。
dotnet SampleApp.dllつまり、.csは開発者が記述するソースファイルであり、.exeや.dllはビルドによって作成される出力ファイルです。役割が異なるため、.exeをC#のソースコード用拡張子として使用することはありません。
まとめ
C#のソースコードを保存する基本的な拡張子は、**「.cs」**です。
Program.cs、Customer.cs、PlayerController.csなど、ファイル名が異なっていても、末尾が.csであればC#のソースファイルとして扱われます。
一方、C#開発では、次のような関連ファイルも使用します。
.csproj:C#プロジェクトの設定.sln:複数プロジェクトの管理.csx:C#スクリプト.resx:文字列や画像などのリソース.config、.json:アプリケーション設定.cshtml:ASP.NET CoreのRazorビュー.razor:Blazorコンポーネント.xaml:WPFや.NET MAUIの画面レイアウト.aspx、.ascx:ASP.NET Web Formsのページや部品.exe、.dll:ビルド後に作成される実行ファイルやライブラリ
C#の拡張子について迷ったときは、「C#のコードを書くファイルは.cs」「それ以外はプロジェクト設定や画面、リソース、ビルド結果を管理する関連ファイル」と整理すると理解しやすくなります。

