HTTP Error 500.30 - ASP.NET Core アプリの起動失敗
概要
ASP.NET Core アプリケーションをデプロイした際に「HTTP Error 500.30 - ASP.NET Core app failed to start」というエラーが発生する問題について解説します。このエラーはアプリケーションの起動に失敗したことを示しており、様々な原因が考えられます。
問題の特定方法
1. Windows イベントビューアーの確認
推奨方法
Windows イベントビューアーは最も確実なエラー情報の取得方法です。
- Windows 検索で「イベント ビューアー」を開く
- 「Windows ログ」 > 「アプリケーション」を選択
- 「エラー」レベルの警告を確認
2. 標準出力ログの有効化
web.config
ファイルで標準出力ログを有効にします:
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet"
arguments=".\YourApp.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout" />
</system.webServer>
3. Program.cs に例外処理を追加
アプリケーションのエントリーポイントで例外をキャッチします:
public static void Main(string[] args)
{
try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
// ログに記録またはコンソールに出力
Console.WriteLine($"起動エラー: {ex.Message}");
throw;
}
}
主な原因と解決策
1. 依存関係インジェクションの問題
よくある間違い
インターフェースを実装クラスとして登録する誤り:
// 誤り
services.AddScoped<IService, IService>();
// 正しい
services.AddScoped<IService, Service>();
設定の読み込みの問題:
// 従来の方法(問題が発生する場合あり)
builder.Services.AddSingleton(new EmailConfiguration(
builder.Configuration["EmailConfiguration:Host"],
// ... 他のパラメータ
));
// 推奨方法
builder.Services.Configure<EmailConfiguration>(
builder.Configuration.GetSection("EmailConfiguration")
);
builder.Services.AddTransient<IEmailService, EmailService>();
2. ランタイムの不一致
ホスティングバンドルのバージョン確認:
dotnet --info
出力されたホストバージョンとアプリケーションのターゲットフレームワークが一致していることを確認します。
3. ファイルパーミッションの問題
IIS_IUSRS ユーザーに以下のフォルダへのフルコントロール権限を付与:
- App_Data
- Logs
- アプリケーションルートフォルダ
4. 32ビット/64ビットの不一致
IIS アプリケーションプール設定で「32 ビット アプリケーションを有効にする」を無効にします。
5. ポートとファイアウォールの設定
カスタムポートを使用している場合、ファイアウォールで該当ポートが開放されているか確認します。
6. Azure 特有の問題
Azure App Service で発生する場合のチェック項目:
- データベースのファイアウォール設定(Azure サービスからのアクセスを許可)
- Azure Key Vault のアクセス権限設定
- 証明書の有効期限切れ
デプロイ設定の最適化
Visual Studio 発行プロファイル
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>True</DeleteExistingFiles>
<TargetFramework>net8.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>
推奨発行設定
設定項目 | 推奨値 | 説明 |
---|---|---|
配置モード | フレームワーク依存 | ターゲット環境に.NET runtimeがインストールされている場合 |
ターゲット ランタイム | win-x64 | 64ビット環境向け |
既存のファイルを削除 | ✅ はい | 古いファイルによる競合を防ぐ |
トラブルシューティングフロー
予防策
- ローカルテストの徹底: 開発環境では様々な設定をシミュレート
- 段階的デプロイ: 設定を少しずつ変更しながら問題を特定
- ログの活用: 常に詳細なログ出力を設定
- 権限の最小限化: 必要最小限の権限で動作するよう設計
まとめ
HTTP Error 500.30 は様々な原因で発生するため、系統的な調査が必要です。イベントビューアーでのエラー確認を第一歩とし、依存関係の注入、ファイル権限、ランタイムバージョンなどの主要な原因を順に排查していくことが効果的です。
Azure App Service を使用している場合は、「診断して解決」機能やアプリケーションログを活用することで、より効率的に問題を特定できます。