Visual Studio 2022でIIS Expressデバッグを完全解説|Windows 11のASP.NET(.NET Framework)設定・変換・トラブル対処

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 が選べない」などの症状がある。

もっとも確実な解決手順(クイックスタート)

  1. VS インストーラーで「IIS Express」を明示的に導入(個別コンポーネントにチェック)。
  2. VS の 64bit IIS Express 設定を確認(必要なら切替)。
  3. 対象が ASP.NET(.NET Framework)か判定(Web Application / Web Site / その他を見分ける)。
  4. プロジェクト側の設定を点検(<UseIISExpress> など)。
  5. それでも選択肢が出ない場合は「安全な変換」(新規テンプレートへファイル移植)。
  6. IIS Express でデバッグ開始(ポート/SSL 設定や applicationhost.config を把握)。
  7. 本番に近い検証が必要なら IIS プロファイルを追加(アプリプール/バインド/hosts などを設定)。

手順詳細

VS インストーラーで IIS Express を有効化する

  1. 「Visual Studio インストーラー」を起動し、対象エディションの 変更(Modify) をクリック。
  2. 個別のコンポーネント(Individual components) タブを開き、クラウド、データベース、サーバー のカテゴリにある 「IIS Express」 にチェック。
  3. 右下の 変更 を押して適用。完了後に 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 回避)

  1. VS メニューの ツール > オプション を開く。
  2. プロジェクトおよびソリューション > Web プロジェクト を選ぶ。
  3. 「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 プロジェクトでない場合の「安全な変換」手順

  1. VS で 新規作成 > 「ASP.NET Web アプリケーション(.NET Framework)」 を選び、テンプレートは 空(Empty)を推奨して作成。
  2. 旧サイトから次のファイルを選んでコピー:
    • .aspx / .ascx / .asmx / .cs / .resx
    • web.config(まずは丸ごと。後で差分調整)
    • 画像/CSS/JS/フォント等の静的ファイル
  3. NuGet で必要パッケージを追加(旧 packages.config 方式なら VS が自動復元)。
  4. ビルドターゲット(.NET Framework 4.x)の整合をとる。web.config の targetFramework とプロジェクトの設定を合わせる。
  5. ビルドし、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 &lt;PID&gt; /F

プロセスに手動アタッチする(高度なデバッグ)

ときどき VS が別のプロセスにアタッチしてしまう場合は、デバッグ > プロセスにアタッチ から iisexpress.exe を明示的に選択します。IIS(本体)で動かすときは w3wp.exe を選びます。

IIS(ローカルの実サーバー)での動作検証

  1. Windows の「Windows の機能の有効化または無効化」で IIS を有効にし、アプリケーション開発機能(.NET 拡張、ISAPI など)を入れておく。
  2. プロジェクト > プロパティ > デバッグ から IIS プロファイルを追加。サイト名、仮想ディレクトリ、ポート/ホスト名を設定。
  3. IIS マネージャーでアプリケーションプールを確認:
    • .NET CLR バージョン:v4.0
    • パイプライン モード:統合(Integrated)
    • 32/64bit:参照 DLL に合わせる(詳細設定 > 32 ビット アプリの有効化)
  4. 必要に応じて hosts に 127.0.0.1 mysite.local を追加し、バインド にホスト名を設定。
  5. フォルダ ACL は IIS_IUSRS / アプリプール ID に読み取り(書き込みが必要な場合は限定的に付与)。

代表的なトラブルと対処集

症状原因対処
IIS Express が選べないVS のコンポーネント未導入 / Web Application でない / .vs 構成の破損インストーラーで導入、.csproj 形式へ変換、.vs フォルダの再生成
BadImageFormatExceptionプロセスと参照 DLL のビット数不一致VS の 64bit IIS Express 設定を切替(x86 DLL なら 32bit)
HTTP Error 500.19web.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)

  1. 新規プロジェクト:ASP.NET Web アプリケーション(.NET Framework) → 空 → 4.8 などを選択。
  2. Web フォーム を 1 枚追加して Default.aspx を作成。
  3. マークアップを次で置換: <%@ 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>
  4. プロジェクト > プロパティ > 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 有効化例

&lt;Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"&gt;
  &lt;PropertyGroup&gt;
    &lt;TargetFrameworkVersion&gt;v4.8&lt;/TargetFrameworkVersion&gt;
    &lt;UseIISExpress&gt;true&lt;/UseIISExpress&gt;
    &lt;Use64BitIISExpress&gt;true&lt;/Use64BitIISExpress&gt; &lt;!-- 32bit にしたい場合は false --&gt;
  &lt;/PropertyGroup&gt;
&lt;/Project&gt;

web.config のフレームワーク整合点

&lt;configuration&gt;
  &lt;system.web&gt;
    &lt;compilation targetFramework="4.8" debug="true" /&gt;
  &lt;/system.web&gt;
&lt;/configuration&gt;

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(本体)に切り替えるのが安全です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次