Windows 11 と Visual Studio 2022 の組み合わせで、既存の ASP.NET(.NET Framework)サイトを IIS Express でサクッとデバッグできない――そんな状況を一気に解消するための実践ガイドです。インストール確認から 32/64bit 切替、プロジェクト判定と変換、applicationhost.config の扱い、IIS での動作確認、代表的エラーの直し方まで、現場でそのまま使える具体手順を体系化しました。
前提とゴール
この記事のゴールは「Visual Studio 2022(以降 VS2022)で IIS Express を確実に選べて、F5 でデバッグ開始できる状態」を作ることです。IIS(本体)での検証も必要になったとき、無理なく切り替えられるところまでをカバーします。
- 対象 OS / IDE: Windows 11 / Visual Studio 2022(Community/Professional/Enterprise)
- 対象プロジェクト: ASP.NET Web アプリ(.NET Framework)
※ ASP.NET Core ではなく、web.configを持つ従来型。 - 前提: IIS(Windows の役割)や
C:\Program Files\IIS Expressの存在は確認済み。ただし VS から「IIS Express が選べない」などの症状がある。
もっとも確実な解決手順(クイックスタート)
- VS インストーラーで「IIS Express」を明示的に導入(個別コンポーネントにチェック)。
- VS の 64bit IIS Express 設定を確認(必要なら切替)。
- 対象が ASP.NET(.NET Framework)か判定(Web Application / Web Site / その他を見分ける)。
- プロジェクト側の設定を点検(
<UseIISExpress>など)。 - それでも選択肢が出ない場合は「安全な変換」(新規テンプレートへファイル移植)。
- IIS Express でデバッグ開始(ポート/SSL 設定や
applicationhost.configを把握)。 - 本番に近い検証が必要なら IIS プロファイルを追加(アプリプール/バインド/hosts などを設定)。
手順詳細
VS インストーラーで IIS Express を有効化する
- 「Visual Studio インストーラー」を起動し、対象エディションの 変更(Modify) をクリック。
- 個別のコンポーネント(Individual components) タブを開き、クラウド、データベース、サーバー のカテゴリにある 「IIS Express」 にチェック。
- 右下の 変更 を押して適用。完了後に VS を再起動。
この操作で VS から利用する 32bit/64bit の iisexpress.exe が揃います。標準パスは次のとおりです。
%ProgramFiles%\IIS Express\iisexpress.exe (64bit)
%ProgramFiles(x86)%\IIS Express\iisexpress.exe (32bit)
念のため、コマンドプロンプトでバージョン確認も可能です。
"%ProgramFiles%\IIS Express\iisexpress.exe" /?
64bit IIS Express の使用を切り替える(BadImageFormatException 回避)
- VS メニューの ツール > オプション を開く。
- プロジェクトおよびソリューション > Web プロジェクト を選ぶ。
- 「Web サイトおよびプロジェクトで 64 bit 版 IIS Express を使用する」 を必要に応じてオン/オフ。
| 状況 | 推奨 | 理由 |
|---|---|---|
| 参照 DLL が x64 のみ | 64bit を使用 | プロセスと DLL のビット数を合わせる |
| 古い x86 ネイティブ DLL を参照 | 64bit をオフ(32bit) | BadImageFormatException の解消 |
| 特に制約なし | 64bit を使用 | 近年の開発環境に整合し、メモリ上限も広い |
そのプロジェクトは本当に ASP.NET(.NET Framework)?――正しい見分け方
「IIS Express が選べない」最大の原因は プロジェクト種別の取り違え です。以下を順に確認しましょう。
1) Web Application(推奨形式)か?
- フォルダー内に
.csprojが存在する。 web.config、Global.asax、.aspx/.ascx/.asmxなどがある。.csprojを「アンロード > 編集」で開くと、次のような設定を含むことが多い。<UseIISExpress>true</UseIISExpress> <Use64BitIISExpress>true</Use64BitIISExpress> <!-- 任意 -->
2) Web Site(旧形式)か?
.csprojがない(かわりに.slnがサイトフォルダを直接参照)。.slnをメモ帳で開くと、Web Site を示すE24C65DC-7377-472B-9ABA-BC803B73C61Aの GUID が現れることがある。- この形式は VS の UI が異なり、IIS Express のプロファイルが見えづらい/制約が多い。
3) ASP.NET Core(.NET 6+ など)ではないか?
Program.csにWebApplication.CreateBuilder()などがあり、appsettings.jsonを使っている。- この場合は本記事の対象外。IIS Express ではなく Kestrel + IIS Express のブリッジで動きます。
補足:FAE04EC0-301F-11D3-BF4B-00C04F79EFBC について
この GUID は C# プロジェクト を示す識別子で、ASP.NET 専用ではありません。ASP.NET(Web Application)かどうかの確定には、.csproj の中身(ProjectTypeGuids や UseIISExpress)、および ファイル構成(web.config 等) で判断してください。
VS の「既定の Web サーバーしか表示されない」問題を直す
プロジェクトが正しく Web Application でも、VS のプロパティ(プロジェクト > プロパティ > Web)に「既定の Web サーバーを使用する」しか出ない場合、次を確認します。
.csprojに<UseIISExpress>true</UseIISExpress>があるか。- VS のインストールで IIS Express コンポーネント が入っているか(前述)。
- ソリューション直下の隠しフォルダ
.vs\<SolutionName>\config\applicationhost.configが壊れていないか。
壊れている場合は VS を閉じて.vsフォルダを削除すると再生成される。 - ワークロード「ASP.NET と Web 開発」が導入済みか(未導入でも個別コンポーネントで動くが、UI が欠けることがある)。
ASP.NET プロジェクトでない場合の「安全な変換」手順
- VS で 新規作成 > 「ASP.NET Web アプリケーション(.NET Framework)」 を選び、テンプレートは 空(Empty)を推奨して作成。
- 旧サイトから次のファイルを選んでコピー:
.aspx/.ascx/.asmx/.cs/.resxweb.config(まずは丸ごと。後で差分調整)- 画像/CSS/JS/フォント等の静的ファイル
- NuGet で必要パッケージを追加(旧
packages.config方式なら VS が自動復元)。 - ビルドターゲット(.NET Framework 4.x)の整合をとる。
web.configのtargetFrameworkとプロジェクトの設定を合わせる。 - ビルドし、IIS Express プロファイルで F5 実行。
| 変換元 | 推奨アプローチ | ポイント |
|---|---|---|
| Web Site 形式 | 新規 Web Application にファイル移植 | プロジェクト形式が最新になり、IIS Express の UI/設定が揃う |
| ライブラリ/ツール用 C# プロジェクト | Web Application を新規作成し、ページ/ハンドラを追加 | Web.config と仮想ディレクトリの概念を取り込む |
IIS Express でのデバッグ運用ノウハウ
プロファイルの選択とポート/SSL
- プロジェクト > プロパティ > Web で「IIS Express」プロファイルを選択。
- Project URL のポートは自由に変更可能。HTTPS を有効にすると自己署名証明書が作成される。
- 証明書エラーが出る場合は VS のダイアログで「信頼」を実行。うまくいかないときはユーザー証明書ストアから「IIS Express Development Certificate」を削除し、VS を再実行して再生成。
applicationhost.config の場所と役割
IIS Express のサイト定義やバインドは、ソリューションごとの .vs\<SolutionName>\config\applicationhost.config に保存されます。
ポート競合・仮想ディレクトリのずれなど不可解な挙動がある場合、VS を閉じてこのフォルダを削除すると再生成され、症状が解消することが多いです。
使用中ポートの確認と解放
netstat -ano | findstr :44300
tasklist /fi "imagename eq iisexpress.exe"
taskkill /PID <PID> /F
プロセスに手動アタッチする(高度なデバッグ)
ときどき VS が別のプロセスにアタッチしてしまう場合は、デバッグ > プロセスにアタッチ から iisexpress.exe を明示的に選択します。IIS(本体)で動かすときは w3wp.exe を選びます。
IIS(ローカルの実サーバー)での動作検証
- Windows の「Windows の機能の有効化または無効化」で IIS を有効にし、アプリケーション開発機能(.NET 拡張、ISAPI など)を入れておく。
- プロジェクト > プロパティ > デバッグ から IIS プロファイルを追加。サイト名、仮想ディレクトリ、ポート/ホスト名を設定。
- IIS マネージャーでアプリケーションプールを確認:
- .NET CLR バージョン:v4.0
- パイプライン モード:統合(Integrated)
- 32/64bit:参照 DLL に合わせる(詳細設定 > 32 ビット アプリの有効化)
- 必要に応じて
hostsに127.0.0.1 mysite.localを追加し、バインド にホスト名を設定。 - フォルダ ACL は
IIS_IUSRS/ アプリプール ID に読み取り(書き込みが必要な場合は限定的に付与)。
代表的なトラブルと対処集
| 症状 | 原因 | 対処 |
|---|---|---|
| IIS Express が選べない | VS のコンポーネント未導入 / Web Application でない / .vs 構成の破損 | インストーラーで導入、.csproj 形式へ変換、.vs フォルダの再生成 |
| BadImageFormatException | プロセスと参照 DLL のビット数不一致 | VS の 64bit IIS Express 設定を切替(x86 DLL なら 32bit) |
| HTTP Error 500.19 | web.config の重複/記述誤り | 重複セクション(handlers 等)を整理、構文エラー修正 |
| ポートが既に使用されています | 他の IIS Express / アプリが占有 | ポート変更、netstat で特定、プロセス終了 |
| SSL 証明書エラー | 開発証明書が壊れている/未信頼 | VS で再作成、ユーザー証明書から削除後に VS で再生成 |
| CS0016: 出力ファイルを書き込めません | 一時フォルダの ACL 不足 | ユーザーの Temp / ASP.NET 一時フォルダに書き込み権限を付与 |
| ブレークポイントで停止しない | シンボル未読み込み / リリース最適化 | デバッグ構成でビルド、デバッグ > ウィンドウ > モジュールで PDB 読み込み確認 |
| 静的ファイルが 404 | 仮想ディレクトリ/ルート設定の不一致 | applicationhost.config の physicalPath と VS の Project URL を再確認 |
設定のベストプラクティス(実務で効く要点)
| 項目 | 推奨設定 | メリット |
|---|---|---|
| 開発用サーバー | IIS Express を既定に | OS のグローバル設定を汚さず、VS が自動で起動/停止・ポート割当を実施 |
| 64bit 切替 | 参照 DLL に合わせて 32/64bit を切替 | BadImageFormatException の回避、実動作に近い構成で検証 |
| プロジェクト形式 | Web Application(.csproj)を採用 | IIS Express オプションが揃い、ビルド/発行が安定 |
| 構成変換 | web.Debug.config / web.Release.config を活用 | 接続文字列やフラグの切替を自動化、ヒューマンエラー減 |
| チーム開発 | .vs / bin / obj はソース管理から除外 | 衝突を防ぎ、謎のビルド失敗を削減 |
| ポート管理 | Project URL を固定し、各開発者で番号帯を分ける | Webhook や外部コールバック先の URL を安定化 |
| VS 更新 | VS の最新アップデートを適用 | 「64bit IIS Express がグレーアウト」等の UI 不具合が解消 |
最小構成で確認:Hello World(ASP.NET Web Forms)
- 新規プロジェクト:ASP.NET Web アプリケーション(.NET Framework) → 空 → 4.8 などを選択。
- Web フォーム を 1 枚追加して
Default.aspxを作成。 - マークアップを次で置換:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApp.Default" %> <!DOCTYPE html> <html> <head runat="server"><title>Hello</title></head> <body> <form id="form1" runat="server"> <asp:Label ID="Label1" runat="server" Text="Hello IIS Express!" /> </form> </body> </html> - プロジェクト > プロパティ > Web で IIS Express を選択し、F5 実行。
ブラウザに Hello IIS Express! と表示されれば、IIS Express 経由のデバッグ環境は正常です。
現場で遭遇しやすいケース別ハンドブック
ケース A:IIS Express の実行ボタンが消える/グレーアウト
- VS インストーラーで「IIS Express」を再適用。
- ワークロード「ASP.NET と Web 開発」を追加(不足 UI の補完)。
.suo/.user設定が壊れている可能性があるため、.vsフォルダを削除して再生成。
ケース B:IIS Express 起動直後に即終了する
web.configの構文エラー・セクション重複を確認。- 使用ポートが占有されていないか
netstatで確認し、競合を解消。
ケース C:認証や Windows 認証が動かない
- IIS Express でも Windows 認証を有効化可能。
プロジェクト > プロパティ > Web で匿名/Windows 認証のフラグを見直す。 - 必要なら
applicationhost.configの該当サイト設定で確認。
ケース D:Cookie ドメインや CORS が変わる
localhost→mysite.localのようにホスト名を変えると Cookie のdomain条件に影響。
hosts とバインドを合わせ、アプリ側設定も揃える。
チェックリスト
環境セットアップ時
- VS インストーラーで IIS Express を導入した。
- VS の 64bit IIS Express 設定を要件に合わせて切り替えた。
- プロジェクトは Web Application(.csproj) 形式である。
web.configのターゲット フレームワークがプロジェクト設定と一致している。
デバッグ前
- プロパティ > Web で IIS Express を選んだ。
- Project URL とポートが競合していない。
- 必要な証明書を 信頼 済み。
公開/IIS 切替時
- アプリプール:.NET CLR v4.0、統合パイプライン、32/64bit を参照 DLL と一致。
- フォルダ権限:
IIS_IUSRSなど最小権限で設定。 - hosts とサーバーバインドを一致させ、URL 書き換えやリダイレクトを確認。
知っておくと強いテクニック
- プロファイル複製: 同じプロジェクト内で IIS Express(HTTP) と IIS Express(HTTPS) を分けておくと検証が楽。
- 構成変換: 機密情報は
web.Release.configで差し替え、本番ビルドでのみ有効化。 - 外部ツール:
taskkillで僵死(ゾンビ)したiisexpress.exeを掃除してから再実行。 - ソース管理:
.vsとapplicationhost.configは基本的に共有しない。各開発者環境で自動生成に任せる。
まとめ
IIS Express は VS2022 と最も親和性の高い開発用 Web サーバーです。
「インストーラーで IIS Express を明示導入」→「64/32bit の整合」→「プロジェクトが Web Application か判別」→「必要なら変換」――この順で進めれば、「IIS Express が選べない」問題は高確率で解決します。日常のデバッグは IIS Express、リリース前の最終検証は IIS(本体)という二段構えにしておけば、OS を汚さず安全に進められます。
本記事の手順・表・チェックリストをそのまま運用に組み込んで、トラブルの芽を早期に摘み取りましょう。
参照用コード/設定スニペット集
.csproj の IIS Express 有効化例
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<UseIISExpress>true</UseIISExpress>
<Use64BitIISExpress>true</Use64BitIISExpress> <!-- 32bit にしたい場合は false -->
</PropertyGroup>
</Project>
web.config のフレームワーク整合点
<configuration>
<system.web>
<compilation targetFramework="4.8" debug="true" />
</system.web>
</configuration>
port/プロセスの簡易診断
:: 使用中ポートの確認
netstat -ano | findstr :8080
:: iisexpress の PID 一覧
tasklist /fi "imagename eq iisexpress.exe"
:: ハングした iisexpress を強制終了
taskkill /pid /f
付加情報
ポイント:IIS Express は VS が
applicationhost.configを自動生成し、ポート競合も自動回避します。ローカル開発はまず IIS Express、実運用に近い再現が必要になったら IIS(本体)に切り替えるのが安全です。

コメント