C#のアイコン変更方法|Visual Studioでexe・フォーム・タスクバーに反映されない原因まで解説
はじめに
C#で作成したアプリのアイコンを変更したい場合、単に画像を差し替えればよいと思われがちですが、実際には「どこに表示されるアイコンを変えたいのか」によって設定場所が異なります。
たとえば、エクスプローラーで表示されるexeファイルのアイコン、フォーム左上に表示されるアイコン、タスクバーに表示されるアイコン、通知領域に表示されるNotifyIconのアイコンは、それぞれ参照される設定が違う場合があります。
そのため、Visual Studioでアイコンを変更したのに「exeには反映されたがフォームが変わらない」「フォームは変わったのにタスクバーだけ古いまま」「Debugでは変わったのにReleaseでは変わらない」といったトラブルが起こります。
この記事では、C#アプリのアイコン変更方法を、exe・Windows Forms・WPF・タスクバー・NotifyIconに分けて解説します。あわせて、アイコン変更が反映されない主な原因と、確実に反映させるための対処法も紹介します。
1. C#で変更できるアイコンの種類
C#アプリで「アイコンを変更する」といっても、実際には複数のアイコンがあります。まずは、変更対象を整理しておくことが重要です。
1-1. exeアイコン・フォームアイコン・タスクバーアイコンの違い
C#アプリでよく変更するアイコンには、主に次の3種類があります。
exeアイコンは、ビルド後に作成される実行ファイルそのものに埋め込まれるアイコンです。エクスプローラーでexeファイルを表示したときや、ショートカットを作成したときに使われます。Visual Studioのプロジェクトプロパティで設定する「アプリケーションアイコン」がこれにあたります。Microsoftの公式ドキュメントでも、Visual StudioではC#アプリに対してアプリケーションアイコンを指定できると説明されています。Microsoft Learn
フォームアイコンは、Windows Formsの各フォームに設定されるアイコンです。フォーム左上、タイトルバー、Alt+Tabの一覧、場合によってはタスクバーにも影響します。WinFormsのForm.Iconプロパティは、フォームのコントロールボックスやタスクバーでフォームを表す画像として使われます。Microsoft Learn
タスクバーアイコンは、アプリ起動中にWindowsのタスクバーへ表示されるアイコンです。WinFormsではメインフォームのIconプロパティが関係し、WPFではWindow.Iconやアセンブリアイコンが関係します。WPFのWindow.Iconは、タイトルバー、タスクバー、Alt+Tabのアプリ選択リストで使われます。Microsoft Learn
このように、C#のアイコン変更では「exe」「フォーム」「タスクバー」を分けて考える必要があります。
1-2. どのアイコンを変えたいのかを先に確認する
アイコン変更で失敗しないためには、最初に変更したい場所を明確にします。
エクスプローラーで表示されるexeファイルの見た目を変えたいなら、プロジェクトのアプリケーションアイコンを変更します。アプリ起動後のウィンドウ左上のアイコンを変えたいなら、フォームまたはウィンドウのIconプロパティを変更します。タスクバーのアイコンを変えたいなら、exeアイコンだけでなくメインフォームやWPFウィンドウのIcon設定も確認します。
よくある失敗は、exeアイコンだけを変更して「アプリ全体のアイコンが変わった」と思い込んでしまうケースです。実際には、フォーム側のIconプロパティが古いままになっていると、起動中の表示は変更前のアイコンになることがあります。
反対に、フォームアイコンだけを変更しても、ビルドされたexeファイルのアイコンは変わりません。配布用の実行ファイルやショートカットの見た目を変えたい場合は、exe側のアイコン設定も必要です。
1-3. Windows Forms・WPF・コンソールアプリで設定場所が違う
C#アプリの種類によって、アイコンを設定する場所は変わります。
Windows Formsアプリでは、exeアイコンはプロジェクトプロパティから設定し、フォームアイコンは各フォームのIconプロパティで設定します。コードから変更する場合は、フォームのコンストラクターやLoadイベントなどでthis.IconにIconオブジェクトを代入します。
WPFアプリでは、exeアイコンはプロジェクトファイルのApplicationIcon、ウィンドウのアイコンはWindow.Iconで設定します。Window.Iconを設定していない場合、WPFはアセンブリアイコン、またはWindowsの既定アイコンを使用します。Microsoft Learn
コンソールアプリでは、通常は表示するフォームがないため、主にexeファイルのアイコンを変更します。タスクバーに常駐させるようなアプリや、WinFormsのNotifyIconを組み合わせたアプリでは、通知領域のアイコンも別途設定します。
2. アイコン変更前に準備するもの
C#でアイコンを変更する前に、適切な形式のアイコンファイルを用意しておきましょう。ファイル形式やサイズが不適切だと、Visual Studioで設定できなかったり、ビルド後に表示が崩れたりすることがあります。
2-1. 使用できるアイコンファイルは.ico形式が基本
Windowsデスクトップアプリのアイコンには、基本的に.ico形式のファイルを使用します。
pngやjpgなどの画像ファイルは、通常の画像としては扱いやすい形式ですが、exeアイコンやフォームアイコンとしてそのまま使えない場面があります。特にVisual Studioのアプリケーションアイコンには.icoファイルを指定するのが一般的です。
.icoファイルは、単なる画像ファイルではなく、複数サイズの画像を1つのファイルに含められるアイコン専用の形式です。そのため、デスクトップ、エクスプローラー、タスクバー、ショートカットなど、表示場所に応じて適切なサイズの画像が使われます。
2-2. pngやjpgを.icoに変換する方法
手元にあるロゴ画像がpngやjpgの場合は、ico形式へ変換してから使用します。
変換方法はいくつかあります。画像編集ソフトでico形式として書き出す方法、アイコン作成ツールを使う方法、オンラインの変換サービスを使う方法などです。Visual Studio自体でアイコンファイルを作成・編集することもできますが、デザイン性の高いアイコンを作る場合は、外部ツールで作成してからプロジェクトに追加するほうが扱いやすいでしょう。
変換するときは、背景の透明化にも注意します。pngでは透明背景だったのに、ico変換後に背景が白や黒になってしまうことがあります。アプリの見た目に影響するため、変換後のicoファイルをプレビューして確認しておきましょう。
2-3. 推奨されるアイコンサイズと複数サイズを含める理由
アイコンファイルには、複数のサイズを含めておくのがおすすめです。
一般的には、16×16、24×24、32×32、48×48、64×64、128×128、256×256などのサイズを含めます。小さいサイズはタイトルバーや細かい一覧表示で使われ、大きいサイズはデスクトップや高解像度表示で使われます。
1つのサイズしか含まれていないicoファイルを使うと、Windows側で自動的に拡大・縮小され、ぼやけたりギザギザが目立ったりすることがあります。特にタスクバーやエクスプローラーの大アイコン表示では、256×256を含めておくと見た目が安定しやすくなります。
また、小さいサイズでは細かい文字や複雑な図形がつぶれやすくなります。16×16や32×32で見ても判別できるよう、シンプルなデザインにしておくことも大切です。
2-4. アイコンファイルをプロジェクト内に配置する場所
アイコンファイルは、プロジェクト内の分かりやすい場所に配置します。
たとえば、プロジェクト直下に「app.ico」を置く方法や、「Resources」「Assets」「Images」などのフォルダを作成して、その中に配置する方法があります。どこに置いても設定は可能ですが、後から管理しやすいようにルールを決めておくと便利です。
おすすめは、次のような構成です。
MyApp
├─ Assets
│ └─ app.ico
├─ Forms
├─ Program.cs
└─ MyApp.csproj
フォームアイコンとしてコードから読み込む場合は、ファイルのコピー設定やリソース登録にも注意します。実行時に外部ファイルとして読み込むのか、プロジェクトリソースとして埋め込むのかによって、指定方法が変わります。
配布時にアイコンファイルを別ファイルとして持たせたくない場合は、exeアイコンとして埋め込む、またはリソースとして埋め込む方法を選びます。
3. Visual Studioでexeアイコンを変更する方法
exeアイコンを変更したい場合は、Visual Studioのプロジェクトプロパティから設定します。これは、ビルド後の実行ファイルに埋め込まれるアイコンです。
3-1. プロジェクトのプロパティからアイコンを設定する手順
Visual Studioでexeアイコンを変更する基本手順は次のとおりです。
まず、ソリューションエクスプローラーで対象のプロジェクトを右クリックします。次に「プロパティ」を開きます。プロパティ画面が表示されたら、「アプリケーション」タブを選択します。
その中にある「アイコン」または「アプリケーションアイコン」の項目で、用意した.icoファイルを指定します。プロジェクトの種類やVisual Studioのバージョンによって画面表示は多少異なりますが、C#のWindowsデスクトップアプリでは、アプリケーション用のアイコンを指定する項目が用意されています。Microsoft Learn
設定後、保存してビルドします。ビルドが完了すると、出力フォルダに作成されるexeファイルにアイコンが埋め込まれます。
3-2. 「アプリケーション」タブでアイコンを指定する
Visual Studioのプロパティ画面では、「アプリケーション」タブがexeアイコン設定の中心になります。
ここで指定するアイコンは、アプリケーション全体のアイコンとして扱われます。エクスプローラーでexeファイルを見たときのアイコンや、ショートカット作成時の既定アイコンに関係します。
ただし、この設定だけで、すべての画面表示が必ず変わるわけではありません。Windows Formsのフォーム左上のアイコンは、各フォームのIconプロパティが優先される場合があります。WPFでも、各WindowのIconプロパティを個別に設定している場合は、その設定がウィンドウ表示に使われます。
そのため、アプリ全体で統一したアイコンにしたい場合は、exeアイコンとフォームアイコン、またはWPFのWindow.Iconをあわせて設定しましょう。
3-3. .csprojファイルでApplicationIconを確認する方法
Visual Studioの画面から設定したexeアイコンは、プロジェクトファイルで確認できます。
SDK形式のプロジェクトでは、.csprojファイルに次のような記述が入ります。
XML<PropertyGroup>
<ApplicationIcon>Assets\app.ico</ApplicationIcon>
</PropertyGroup>
このApplicationIconが、ビルド時にアプリケーションアイコンとして使用される設定です。Microsoftのドキュメントでも、WPFのアセンブリアイコンはプロジェクトビルドファイルのApplicationIconプロパティで指定されると説明されています。Microsoft Learn
Visual Studio上で設定したはずなのに反映されない場合は、.csprojを直接開いて、ApplicationIconのパスが正しいか確認しましょう。ファイル名を変更した、フォルダを移動した、パスに誤りがあるといった場合、ビルド時に正しく反映されないことがあります。
また、複数のプロジェクトがあるソリューションでは、実際に起動しているプロジェクトの.csprojを確認することが重要です。別のプロジェクトにアイコンを設定していても、起動プロジェクトが違えば反映されません。
3-4. ビルド後のexeアイコンを確認する方法
exeアイコンを確認するときは、Visual Studioの画面ではなく、実際にビルドされたexeファイルを確認します。
通常、Debugビルドの場合は次のような場所に出力されます。
bin\Debug\net8.0-windows\MyApp.exe
Releaseビルドの場合は次のような場所です。
bin\Release\net8.0-windows\MyApp.exe
.NET Frameworkプロジェクトでは、次のようなパスになることもあります。
bin\Debug\MyApp.exe
bin\Release\MyApp.exe
確認するときは、どの構成でビルドしたかを必ず確認してください。Debugで設定を確認しているのにReleaseのexeを見ている、またはその逆になっていると、アイコンが変わっていないように見えることがあります。
また、エクスプローラーの表示がキャッシュされている場合、実際にはexeに新しいアイコンが埋め込まれていても、画面上は古いアイコンのまま表示されることがあります。その場合は、エクスプローラーの再起動やアイコンキャッシュの削除を行います。
4. Windows Formsのフォームアイコンを変更する方法
Windows Formsアプリでは、exeアイコンとは別に、フォームごとのIconプロパティを設定できます。フォーム左上やタスクバー表示に関係するため、WinFormsアプリでは特に重要な設定です。
4-1. デザイナー画面のIconプロパティから設定する
もっとも簡単な方法は、Visual Studioのデザイナー画面から設定する方法です。
まず、対象のフォームをデザイナーで開きます。フォーム本体をクリックして選択し、プロパティウィンドウを表示します。プロパティ一覧の中から「Icon」を探し、用意した.icoファイルを指定します。
設定すると、フォームの.resxファイルにアイコン情報が保存されます。これにより、フォームが表示されたときに指定したアイコンが使用されます。
この方法は、フォームごとに個別のアイコンを設定したい場合に便利です。たとえば、メイン画面、設定画面、管理画面などで異なるアイコンを表示したい場合は、それぞれのフォームのIconプロパティを設定します。
一方で、アプリ全体で同じアイコンを使いたい場合は、すべてのフォームに同じ設定を行う必要があります。
4-2. コードでthis.Iconを指定して変更する
フォームアイコンは、コードから変更することもできます。
たとえば、フォームのコンストラクターで次のように指定します。
C#public MainForm()
{
InitializeComponent();
this.Icon = new Icon("Assets/app.ico");
}
ただし、この方法では実行時に指定したパスにicoファイルが存在している必要があります。開発環境では動いても、配布先でファイルが見つからないとエラーになる可能性があります。
リソースに埋め込んだアイコンを使う場合は、次のように指定できます。
C#public MainForm()
{
InitializeComponent();
this.Icon = Properties.Resources.AppIcon;
}
リソースを使う方法なら、アイコンファイルをexeとは別に配布する必要がなくなります。配布時のファイル不足を防ぎたい場合は、リソースとして登録する方法が扱いやすいでしょう。
4-3. 複数フォームすべてに同じアイコンを反映する方法
複数フォームがあるアプリでは、メインフォームだけでなく、サブフォームにもアイコンを設定する必要があります。
手動で各フォームのIconプロパティを設定してもよいですが、フォーム数が多い場合は共通の基底フォームを作る方法が便利です。
C#public class BaseForm : Form
{
public BaseForm()
{
this.Icon = Properties.Resources.AppIcon;
}
}
そのうえで、各フォームをBaseFormから継承します。
C#public partial class MainForm : BaseForm
{
public MainForm()
{
InitializeComponent();
}
}
この方法なら、アイコンを変更するときも基底フォーム側の設定を変えるだけで済みます。
ただし、デザイナーとの相性や既存フォームの継承変更には注意が必要です。すでに多くのフォームがある場合は、共通処理を呼び出すヘルパーメソッドを作る方法もあります。
C#public static class FormIconHelper
{
public static void Apply(Form form)
{
form.Icon = Properties.Resources.AppIcon;
}
}
各フォームのコンストラクターで呼び出します。
C#public SettingsForm()
{
InitializeComponent();
FormIconHelper.Apply(this);
}
4-4. フォーム左上のアイコンが変わらないときの確認ポイント
フォーム左上のアイコンが変わらない場合は、まず対象フォームのIconプロパティを確認します。
メインフォームのアイコンを変更しても、別のフォームを表示している場合、そのフォームのIconプロパティが未設定のままかもしれません。Visual Studioで複数のフォームがある場合は、実際に起動時に表示されているフォームを確認しましょう。
また、FormBorderStyleがFixedDialogの場合、フォームにアイコンが表示されないことがあります。WinFormsのForm.Iconプロパティの説明でも、FormBorderStyleがFixedDialogの場合、このプロパティは効果を持たず、フォームにアイコンが表示されないとされています。Microsoft Learn
さらに、コードでthis.Iconを設定している場合は、InitializeComponentの前後にも注意します。デザイナーで設定したIconがInitializeComponent内で読み込まれるため、その後にコードで上書きしている可能性があります。最終的にどのタイミングでどのアイコンが設定されているかを確認しましょう。
5. タスクバーアイコンを変更する方法
タスクバーアイコンは、ユーザーがアプリを使っている間にもっとも目にしやすいアイコンです。exeアイコンを変更しただけでは期待どおりに変わらない場合があるため、仕組みを理解しておきましょう。
5-1. WinFormsでタスクバーに表示されるアイコンの仕組み
Windows Formsでは、タスクバーに表示されるアイコンはフォームのIconプロパティに影響されます。
MicrosoftのForm.Iconプロパティの説明でも、フォームのアイコンはタスクバーやフォームのコントロールボックスでフォームを表す画像として使われると説明されています。Microsoft Learn
そのため、exeアイコンを変更しただけでは、起動中のタスクバーアイコンが変わらないことがあります。特にメインフォームのIconプロパティに古いアイコンが設定されている場合、タスクバーには古いアイコンが表示される可能性があります。
WinFormsアプリでは、exeアイコンとメインフォームのIconプロパティの両方を設定するのが基本です。
5-2. メインフォームのIconプロパティを設定する
タスクバーアイコンを変更したい場合は、まずメインフォームのIconプロパティを設定します。
デザイナーから設定する場合は、メインフォームを開き、プロパティウィンドウのIconに.icoファイルを指定します。
コードで設定する場合は、次のようにします。
C#public MainForm()
{
InitializeComponent();
this.Icon = Properties.Resources.AppIcon;
}
アプリ起動時に表示されるフォームがMainFormではなく、ログインフォームやスプラッシュ画面の場合は、そのフォームにもアイコンを設定します。タスクバーに表示されるウィンドウがどれかによって、参照されるアイコンが変わるためです。
また、フォームを最小化してタスクバーに表示するアプリでは、最小化前のフォームアイコンが使われることがあります。起動直後、ログイン後、画面遷移後で表示されるフォームが変わる場合は、それぞれのIcon設定を確認しましょう。
5-3. exeアイコンとフォームアイコンを両方設定する
タスクバーアイコンを安定して変更したい場合は、exeアイコンとフォームアイコンの両方を設定します。
exeアイコンだけを設定すると、エクスプローラー上のexeファイルは新しいアイコンになります。しかし、アプリを起動したときのタスクバーアイコンは、フォーム側のIconプロパティに依存することがあります。
フォームアイコンだけを設定すると、起動中の見た目は変わります。しかし、配布したexeファイルやショートカットのアイコンは古いままになることがあります。
つまり、ユーザーから見えるアプリのアイコンを統一したいなら、次の2つをセットで確認します。
XML<ApplicationIcon>Assets\app.ico</ApplicationIcon>
C#this.Icon = Properties.Resources.AppIcon;
この2つを揃えておくことで、exe、フォーム、タスクバーのアイコンが統一されやすくなります。
5-4. WPFでタスクバーアイコンを変更する場合の設定方法
WPFアプリでは、Window.Iconを設定します。
XAMLで設定する場合は、次のように記述します。
XML<Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MyApp"
Icon="Assets/app.ico">
</Window>
コードビハインドで設定する場合は、次のようにします。
C#public MainWindow()
{
InitializeComponent();
this.Icon = new BitmapImage(new Uri("pack://application:,,,/Assets/app.ico"));
}
WPFでは、Window.Iconがタイトルバー、タスクバー、Alt+Tabの表示に使われます。Window.Iconを設定していない場合は、アセンブリアイコンが使用され、アセンブリアイコンもない場合はWindowsの既定アイコンが使われます。Microsoft Learn
そのため、WPFでもexeアイコンとWindow.Iconの両方を設定しておくと、表示のズレを防ぎやすくなります。
5-5. NotifyIconのアイコンを変更する場合の注意点
NotifyIconは、タスクバーの通知領域にアイコンを表示するためのコンポーネントです。通常のタスクバーボタンとは別物です。
Microsoftの説明でも、Windows FormsのNotifyIconコンポーネントはタスクバーのステータス通知領域に単一のアイコンを表示するとされています。Microsoft Learn
NotifyIconのアイコンを変更する場合は、フォームのIconプロパティではなく、NotifyIcon.Iconプロパティを設定します。
C#notifyIcon1.Icon = Properties.Resources.AppIcon;
notifyIcon1.Visible = true;
NotifyIconを使っているアプリでは、次の3つのアイコンを別々に確認する必要があります。
exeアイコン
フォームアイコン
NotifyIconのアイコン
タスクバーのボタンは変わったのに通知領域だけ古い、または通知領域は変わったのにフォーム左上が古いという場合は、それぞれ別の設定を見直しましょう。
6. アイコン変更が反映されない主な原因
C#でアイコンを変更したのに反映されない場合、原因は1つとは限りません。設定ミス、ビルドの古さ、Windowsのキャッシュ、配布方法など、複数の要素が関係します。
6-1. exeアイコンだけ変更してフォームアイコンを変更していない
もっとも多い原因は、exeアイコンだけを変更して、フォームアイコンを変更していないケースです。
Visual Studioのプロジェクトプロパティでアイコンを指定すると、ビルド後のexeファイルのアイコンは変わります。しかし、Windows Formsのフォーム左上やタスクバーに表示されるアイコンは、フォームのIconプロパティに依存することがあります。
この場合、エクスプローラー上のexeは新しいアイコンなのに、起動すると古いアイコンが表示されます。対処法は、メインフォームと必要なサブフォームのIconプロパティを新しいアイコンに変更することです。
6-2. フォームアイコンだけ変更してexeアイコンを変更していない
反対に、フォームアイコンだけを変更しているケースもあります。
この場合、アプリを起動したときのフォーム左上やタスクバーは新しいアイコンになることがあります。しかし、エクスプローラーでexeファイルを見ると古いアイコンのままです。
配布用のアプリでは、ユーザーが最初に見るのはexeファイルやショートカットのアイコンです。そのため、フォームアイコンだけでなく、プロジェクトプロパティからexeアイコンも設定しましょう。
6-3. アイコンファイルの形式やサイズが不適切
アイコンファイルそのものに問題がある場合もあります。
たとえば、拡張子だけ.icoに変更したpngファイルは、正しいicoファイルではありません。Visual Studioで読み込めなかったり、ビルド時にエラーになったりすることがあります。
また、極端に大きい画像や、必要なサイズが含まれていないicoファイルでは、表示が崩れることがあります。小さいサイズでつぶれたり、高DPI環境でぼやけたりする場合は、複数サイズを含むicoファイルを作成し直しましょう。
6-4. DebugとReleaseで別のexeを確認している
C#アプリのビルド結果は、DebugとReleaseで別のフォルダに出力されます。
DebugでビルドしたのにReleaseフォルダのexeを確認していると、アイコンが変わっていないように見えます。逆に、ReleaseでビルドしたのにDebugフォルダを見ている場合も同じです。
Visual Studioの上部にある構成が「Debug」なのか「Release」なのかを確認し、対応するbinフォルダ内のexeを見ましょう。
6-5. Visual Studioのビルド結果が古いままになっている
Visual Studioのビルド結果が古いまま残っていることもあります。
通常のビルドでは、変更内容に応じて必要な部分だけが更新されます。そのため、アイコンファイルを差し替えたにもかかわらず、出力先のexeに古いリソースが残っているように見えることがあります。
この場合は、クリーンを実行してからリビルドします。それでも変わらない場合は、binフォルダとobjフォルダを削除してから再ビルドすると改善することがあります。
6-6. Windowsのアイコンキャッシュが残っている
Windowsは、表示を高速化するためにアイコン情報をキャッシュしています。
そのため、exeファイル自体には新しいアイコンが埋め込まれていても、エクスプローラー上では古いアイコンが表示され続けることがあります。
特に同じファイル名で何度もビルドしている場合、古いアイコンキャッシュが残りやすくなります。エクスプローラーの再起動や、Windowsのアイコンキャッシュ削除を行うと、新しいアイコンが表示されることがあります。
6-7. タスクバーにピン留めしたショートカットのキャッシュが残っている
タスクバーにピン留めしたアプリのアイコンは、ショートカット側に古い情報が残ることがあります。
exeアイコンを変更しても、すでにピン留めされているタスクバーアイコンは古いままになることがあります。この場合、アプリをタスクバーからピン留め解除し、新しいexeまたはショートカットから再度ピン留めします。
また、ショートカットのプロパティでアイコンを個別指定している場合、そのショートカットはexe側のアイコン変更を反映しないことがあります。配布用ショートカットやインストーラーで作成されるショートカットも確認しましょう。
6-8. 発行・インストーラー側のアイコン設定が別になっている
Visual Studio上では正しく見えていても、発行後やインストーラー経由ではアイコンが変わらないことがあります。
これは、発行設定やインストーラー作成ツール側で、別のアイコンが指定されている場合に起こります。ClickOnce、MSIX、Setup Project、Inno Setup、WiXなどを使っている場合は、それぞれの設定画面やスクリプトでアイコン指定を確認しましょう。
特にインストーラーでは、アプリ本体のexeアイコン、スタートメニューのショートカットアイコン、デスクトップショートカットアイコンが別々に設定されることがあります。
7. アイコンを確実に反映させる対処法
アイコン変更が反映されない場合は、設定場所を確認したうえで、ビルド結果とWindows側のキャッシュを順番にリセットしていきます。
7-1. クリーンとリビルドを実行する
まず試したいのは、Visual Studioの「クリーン」と「リビルド」です。
メニューから「ビルド」→「ソリューションのクリーン」を実行し、その後「ソリューションのリビルド」を実行します。
クリーンを行うことで、古いビルド成果物が削除されます。リビルドを行うことで、現在の設定をもとにexeファイルが作り直されます。
アイコンを変更した直後は、通常のビルドだけでなくリビルドまで行うと確認しやすくなります。
7-2. bin・objフォルダを削除して再ビルドする
クリーンとリビルドで変わらない場合は、binフォルダとobjフォルダを削除してから再ビルドします。
Visual Studioを閉じた状態で、プロジェクトフォルダ内のbinとobjを削除します。その後、Visual Studioを開いて再度ビルドします。
bin
obj
これらのフォルダには、ビルド結果や中間ファイルが保存されています。古いリソース情報が残っている疑いがある場合、削除して再生成することで解消することがあります。
ただし、binフォルダ内に手動で置いたファイルがある場合は、削除前にバックアップしておきましょう。
7-3. タスクバーのピン留めを外して再登録する
タスクバーだけ古いアイコンのままの場合は、ピン留めを解除してから再登録します。
まず、タスクバー上のアプリアイコンを右クリックして、ピン留めを外します。次に、新しくビルドしたexeファイルを起動し、表示されたタスクバーアイコンを右クリックして再度ピン留めします。
ショートカットから起動している場合は、ショートカットを作り直すことも重要です。古いショートカットが古いアイコン情報を持っていると、新しいexeアイコンが反映されないことがあります。
7-4. Windowsのアイコンキャッシュを削除する
エクスプローラー上のアイコンだけが変わらない場合は、Windowsのアイコンキャッシュを削除します。
代表的な方法は、エクスプローラーを終了し、IconCache関連のデータベースを削除してから再起動する方法です。環境によって保存場所や手順が異なる場合があるため、作業前に開いているファイルを保存しておきましょう。
簡易的には、PCを再起動するだけで改善することもあります。まずはエクスプローラーの再起動やPC再起動を試し、それでも変わらない場合にアイコンキャッシュの削除を行うとよいでしょう。
7-5. エクスプローラーを再起動して表示を更新する
Windowsの表示だけが古い場合は、エクスプローラーを再起動すると改善することがあります。
タスクマネージャーを開き、「Windows エクスプローラー」を選択して「再起動」をクリックします。これにより、デスクトップやタスクバーの表示が更新されます。
アイコンキャッシュを削除するより簡単に試せるため、まずはエクスプローラーの再起動を行うのがおすすめです。
7-6. 発行後のexeでアイコンを再確認する
開発中のbinフォルダのexeでは正しく表示されていても、発行後のexeでは別のアイコンになることがあります。
そのため、最終確認は必ず配布予定の形式で行います。Visual Studioの「発行」を使う場合は、発行先フォルダに出力されたexeを確認します。インストーラーを作成する場合は、実際にインストールして、スタートメニュー、デスクトップショートカット、タスクバー、アプリ起動中の表示を確認します。
ユーザーに配布する前に、開発環境とは別のPCや仮想環境で確認すると、キャッシュや古いショートカットの影響を受けにくくなります。
8. C#アプリのアイコン設定でよくある質問
C#のアイコン変更では、exe、フォーム、タスクバー、ショートカット、発行設定が関係するため、同じような疑問がよく出てきます。ここでは、特に多い質問をまとめます。
8-1. exeアイコンとフォームアイコンは同じにするべきか
基本的には、同じアイコンにするのがおすすめです。
exeアイコンとフォームアイコンが違うと、エクスプローラーで見たときのアプリと、起動後のタスクバー表示が別のアプリのように見えてしまうことがあります。ユーザーに分かりやすくするためにも、アプリ全体で同じブランドアイコンを使うほうが自然です。
ただし、複数の機能画面を持つ業務アプリなどでは、フォームごとに別のアイコンを設定することもあります。その場合でも、メインフォームとexeアイコンは同じにしておくと、アプリ全体の印象が統一されます。
8-2. タスクバーだけ古いアイコンのままになるのはなぜか
タスクバーだけ古いアイコンのままになる原因は、主に3つあります。
1つ目は、メインフォームのIconプロパティが古いままになっていることです。WinFormsではフォームのIconがタスクバー表示に関係するため、exeアイコンだけ変更してもタスクバーが変わらないことがあります。
2つ目は、タスクバーにピン留めしたショートカットのキャッシュです。古いショートカット情報が残っている場合は、ピン留めを解除して再登録します。
3つ目は、Windowsのアイコンキャッシュです。exeやフォームの設定が正しくても、Windows側の表示キャッシュによって古いアイコンが見えている場合があります。
8-3. アイコンを変更してもVisual Studio上で変わらないのはなぜか
Visual Studio上で変わらない場合、確認している場所が違う可能性があります。
プロジェクトプロパティで変更したアイコンは、主にビルド後のexeに反映されます。Visual Studioのソリューションエクスプローラー上の表示や、デザイナー上の見た目がすぐに変わるとは限りません。
また、デバッグ実行中の表示と、実際のexeを直接起動した場合の表示が異なることもあります。WPFでは、デバッグ時にアイコンが表示されない場合でも、実行ファイルを直接起動すると表示されることがあると公式ドキュメントで説明されています。Microsoft Learn
確認するときは、ビルド後のexeファイルを直接実行し、エクスプローラー上の表示、タスクバー表示、ウィンドウ左上の表示を分けて確認しましょう。
8-4. .ico以外の画像ファイルは使えるのか
場面によってはpngなどを使えることもありますが、exeアイコンやWinFormsのIconプロパティでは.ico形式を使うのが基本です。
WPFのWindow.IconではImageSourceを扱うため、画像リソースを指定できる場合もあります。ただし、Windowsアプリのアイコンとして安定して使うなら、ico形式を用意しておくほうが無難です。
特にexeファイルに埋め込むアプリケーションアイコンは、ico形式で用意しましょう。複数サイズを含めたicoファイルにしておくと、エクスプローラーやタスクバーでの表示が安定します。
8-5. 配布後にアイコンが変わらない場合はどうすればよいか
配布後にアイコンが変わらない場合は、まず配布物に含まれるexeが最新か確認します。
開発中のbinフォルダでは新しいアイコンでも、発行フォルダやインストーラーに古いexeが含まれている可能性があります。発行処理やインストーラー作成をやり直し、配布先で実際にインストールして確認しましょう。
次に、ショートカットのアイコン設定を確認します。デスクトップショートカットやスタートメニューのショートカットが古いアイコンを個別指定している場合、exeを更新しても表示が変わらないことがあります。
最後に、Windowsのアイコンキャッシュやタスクバーのピン留めを確認します。ユーザー環境では古いキャッシュが残ることがあるため、再起動、ピン留め解除、ショートカット再作成で改善する場合があります。
まとめ
C#でアイコンを変更する場合は、まず「どのアイコンを変更したいのか」を明確にすることが大切です。
エクスプローラーで表示されるexeアイコンを変えたい場合は、Visual Studioのプロジェクトプロパティからアプリケーションアイコンを設定します。Windows Formsのフォーム左上やタスクバーのアイコンを変えたい場合は、フォームのIconプロパティを設定します。WPFでは、Window.IconとApplicationIconの両方を確認します。NotifyIconを使っている場合は、NotifyIcon.Iconも別途設定が必要です。
アイコン変更が反映されないときは、exeアイコンとフォームアイコンのどちらか一方しか変更していない、DebugとReleaseを見間違えている、古いビルド結果が残っている、Windowsのアイコンキャッシュが残っている、タスクバーのピン留めショートカットが古いといった原因が考えられます。
確実に反映させるには、ico形式のアイコンを用意し、exeアイコンとフォームアイコンを両方設定したうえで、クリーン、リビルド、bin・obj削除、タスクバーの再ピン留め、エクスプローラー再起動を順番に試しましょう。
C#アプリのアイコン変更は、設定場所さえ整理できれば難しくありません。exe、フォーム、タスクバー、通知領域、配布後のショートカットを分けて確認すれば、「アイコンを変更したのに反映されない」という問題も解決しやすくなります。

