C#の拡張子は「.cs」だけ?初心者が迷いやすい関連ファイルと使い分けを解説

はじめに

C#を学び始めたとき、「C#のファイルにはどの拡張子を付ければよいのか」「.csproj.cshtmlもC#の拡張子なのか」と迷う人は少なくありません。

C#のソースコードを保存する基本的な拡張子は、**「.cs」**です。ただし、実際のC#開発では、プロジェクト設定や画面レイアウト、リソース、アプリケーション設定などを管理するために、さまざまな拡張子のファイルを使用します。

この記事では、C#の基本的な拡張子である.csの役割をはじめ、.csproj.sln.cshtml.xamlなど、初心者が混同しやすい関連ファイルとの違いを解説します。

1. C#の基本的な拡張子は「.cs」

C#でプログラムを書くとき、ソースコードを保存するファイルの拡張子には、基本的に**「.cs」**を使用します。

たとえば、次のようなファイル名です。

  • Program.cs

  • Sample.cs

  • UserService.cs

  • MainWindow.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は画面レイアウトを記述するためのファイルです。

拡張子主な役割
.csC#のソースコード
.csprojC#プロジェクトの設定
.sln複数プロジェクトの管理
.json設定やデータの記述
.resx文字列や画像などのリソース
.xaml画面レイアウトの定義

.cs以外のファイルが表示されても、そのすべてにC#コードが記述されているわけではありません。

2-3. Visual Studioが関連ファイルを自動生成する場合がある

Visual Studioで新しいプロジェクトや画面を作成すると、開発に必要なファイルが自動的に生成されます。

たとえば、Windows Formsでフォームを追加すると、次のようなファイルが作成される場合があります。

  • Form1.cs

  • Form1.Designer.cs

  • Form1.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.config

  • Web.config

一方、ASP.NET Coreなどの.NETアプリケーションでは、次のようなJSON形式の設定ファイルが一般的です。

  • appsettings.json

  • appsettings.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.xaml

  • MainWindow.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.aspx

  • Default.aspx.cs

  • Header.ascx

  • Header.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.csForm1.Designer.csSample.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.cs

  • Resources.Designer.cs

  • Client.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アプリケーションでは、.dlldotnetコマンドから実行する形式もあります。

dotnet SampleApp.dll

つまり、.csは開発者が記述するソースファイルであり、.exe.dllはビルドによって作成される出力ファイルです。役割が異なるため、.exeをC#のソースコード用拡張子として使用することはありません。

まとめ

C#のソースコードを保存する基本的な拡張子は、**「.cs」**です。

Program.csCustomer.csPlayerController.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」「それ以外はプロジェクト設定や画面、リソース、ビルド結果を管理する関連ファイル」と整理すると理解しやすくなります。