ASP.NET Core アプリケーションを OutOfProcess で動作させる

Master Mole
質問: ASP.NET Core アプリケーションを OutOfProcess で動作させたい
ASP.NET Core アプリケーションを OutOfProcess で動作させれば、アプリケーションプールを共有できると聞きました。 どのように設定すれば、ASP.NET Core アプリケーションを OutOfProcess で動作させることができますか?

手順

ASP.NET Core アプリケーションをOutOfProcessで動作させるには以下の設定をします。

プロジェクトファイルの編集

Visual Studioを利用している場合は、ソリューションエクスプローラーでプロジェクトのノードを選択して右クリックします。
ポップアップメニューの[プロジェクト ファイルの編集]の項目をクリックします。
ASP.NET Core アプリケーションを OutOfProcess で動作させる:画像1


左側のテキストエディタ部分にプロジェクトファイルのコードが表示されます。
ASP.NET Core アプリケーションを OutOfProcess で動作させる:画像2


プロジェクトファイルのXMLの<PropertyGroup>タグ内に以下のタグを追加します。

全部小文字で記述したほうが良いです。

<AspNetCoreHostingModel>outofprocess</AspNetCoreHostingModel>


ASP.NET Core アプリケーションを OutOfProcess で動作させる:画像3

補足
ガイドによっては以下の記述もあります。
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
大文字で記述した場合、発行時に生成されれるweb.configで以下のワーニングが発生する場合があります。
警告メッセージ
'hostingModel' 属性は無効です。値 'OutOfProcess' はデータ型 'String' に対して無効です。列挙型制約に失敗しました。



プロジェクトファイル全体は以下になります。(一例)

変更前
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

変更後
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <AspNetCoreHostingModel>outofprocess</AspNetCoreHostingModel>
  </PropertyGroup>

</Project>

アプリケーションの発行

プロジェクトファイルの設定後にアプリケーションを発行します。
出力ディレクトリのweb.config を確認します。以下のファイルが生成されています。(一例)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\WebCurrentTimeDisplay.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 4FE1B715-2EB5-4EE0-9F29-1E7A4B7950D0-->


aspNetCoreタグにhostingModel="outofprocess"が設定されていればOKです。

<aspNetCore processPath="dotnet" arguments=".\WebCurrentTimeDisplay.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" />

配置と動作確認

発行されたファイルを配置して動作確認します。

補足: InProcess と OutOfProcess の違い

InProcess と OutOfProcessでどのような違いがあるかを紹介します。

InProcess と OutOfProcess の比較(IIS + ASP.NET Core)
観点 InProcess OutOfProcess
実行場所 IIS の w3wp.exe 内 別プロセス(Kestrel / dotnet.exe / exe)
IIS との関係 IIS が 直接アプリをホスト IIS は リバースプロキシ
パフォーマンス 高い(プロキシなし) やや低下(IIS → アプリ転送あり)
レイテンシ 低い わずかに増える
アプリプール共有不可(実質 1アプリ=1プール)可能(複数アプリ共存)
500.35 エラー 発生しやすい(複数配置で必ず) 発生しない
プロセス分離 なし(w3wp 依存) あり(アプリごとに別プロセス)
障害影響範囲 プール内=アプリ単体 プール内でも アプリ単体
アプリプール数 増えやすい 減らしやすい
運用管理コスト 高くなりがち(プール乱立) 低くしやすい(集約可能)
Identity(権限) プール単位 プール単位(+アプリ側制御)
設定の単純さ 単純(ただし数が増える) やや複雑(構成理解が必要)
推奨用途 重要・高負荷・単独運用 ツール系・管理系・多数アプリ
AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2025-12-28