更新プログラム
.NETアプリケーションを運用する場合、更新プログラムの適切な管理はランタイムのセキュリティや機能改善に欠かせない要素です。本ページでは、.NETの更新プログラムの配布とインストールについて解説します。
Microsoft Updateによる自動更新
.NET FrameworkがOSコンポーネントとして位置づけられているのに対して、.NETおよび.NET CoreはOSコンポーネントではなく「その他のMicrosoft製品」として扱われています。そのため、.NETおよび.NET Coreの更新プログラムはWindows UpdateではなくMicrosoft Updateを通じて更新プログラムが提供されています。Microsoft Updateからの更新プログラムの取得は既定では無効となっているため、[設定]アプリの[Windows Update]-[詳細オプション]ページから設定を有効にしておく必要があります。
ただし、その他のMicrosoft製品の自動更新を受け取る構成の場合の動作はクライアントOSとサーバーOSで異なっています。クライアントOSの場合は.NETの更新プログラムを受け取ることが既定の動作となるため、もし.NETの更新プログラムは受け取りたくない場合、レジストリ設定を通じてブロックする必要があります。サーバーOSの場合は.NETの更新プログラムを受け取らないことが既定の動作となるため、.NETの更新プログラムを受け取りたい場合はレジストリ設定を通じて許可する必要があります。
クライアントOSのレジストリ設定
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NET]
"BlockMU"=dword:00000001
サーバーOSのレジストリ設定
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NET]
"AllowAUOnServerOS"=dword:00000001
参考情報
- Windows に .NET をインストールする
- .NET Core 2.1, 3.1, and .NET 5.0 updates are coming to Microsoft Update
- .NET Automatic Updates for Server Operating Systems
- Azure Update Manager – Patching .NET Core
WSUSによる自動更新
Windows Server Update Services(WSUS)による自動更新では、前節のような「その他のMicrosoft製品の自動更新を受け取る」設定やレジストリの設定は必要ありません。WSUSの管理画面で.NETの更新プログラムのインストールを承認すれば、WSUSで管理されているデバイスは.NETの更新プログラムを受け取ることができます。 とはいえ、WSUSは既に非推奨の機能として位置づけられているので、他の更新プログラム管理のサービスを利用したほうがよいかもしれません。
製品
WSUSで同期するときに選択する.NET関連の製品は[Microsoft]-[Developer Tools, Runtimes, and Redistributables]のツリーにあります。
手動で更新する場合の注意点
.NETの更新プログラムをMicrosoft Updateカタログから入手して手動でインストールする場合、インストールされているソフトウェアに応じて適切なインストーラーを使用する必要があります。例えば2024年11月の.NET 8向けの更新プログラムKB5047489のダウンロードページを確認すると下図のように多数のパッケージが表示されますが、.NETランタイム(x64)のみをインストールしている場合は"dotnet-runtime-8.0.11-win-x64..."のみインストールが必要となります。
Microsoft Updateカタログで公開されているパッケージは、更新の差分のみを含むいわゆる「パッチ」ではなく、全体を含むスタンドアロンインストーラーとなっています。そのため、必要ないものを実行した場合は新規インストールとなりますので注意が必要です。例えば、ASP.NET Coreアプリケーションを実行するWebサーバーではASP.NET Core のランタイムのみがインストールされていることが一般的ですが、このページの一覧をすべてインストールしてしまうと、Windows Desktop Runtimeや.NET SDKといった不要なものまでインストールすることになってしまいます。
更新時に古いバージョンを削除するタイミング
.NETはバージョン毎に異なるフォルダーにインストールされます。例えば、.NETランタイムのバージョン8.0.17はC:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.17にインストールされます。そのため、更新プログラムを適用した場合はフォルダーも変更されます。 この動作が問題になることはあまりありませんが、アプリケーションの実行中に更新プログラムが適用された場合は問題が起きる可能性があります。例えば.NET 8.0.16でアプリケーションが実行中に更新プログラムがインストールされて.NET 8.0.17になった場合、既定では.NET 8.0.16のファイルは削除されますので、.NET 8.0.16で実行中だったアプリケーションがアセンブリを読み込もうとするとファイルが見つからず例外が発生する可能性があります。(.NET Runtime - Issue 60144, .NET Runtime - Issue 106829)
このような問題を回避するために、.NET 8.0.11および.NET 9以降のバージョンでは更新時に古いバージョンを削除するタイミングを設定で変更することが可能です。
.NETのバージョン | レジストリキー | 名前 | 種類 | 値 |
---|---|---|---|---|
すべて | HKLM\SOFTWARE\Microsoft\.NET | RemovePreviousVersion | REG_SZ | always、never、nextSessionのいずれか |
.NET 8 | HKLM\SOFTWARE\Microsoft\.NET\9.0 | RemovePreviousVersion | REG_SZ | always、never、nextSessionのいずれか |
.NET 9 | HKLM\SOFTWARE\Microsoft\.NET\8.0 | RemovePreviousVersion | REG_SZ | always、never、nextSessionのいずれか |
- never: 以前のバージョンを削除せず保持します。
- always: 新しいバージョンのインストール後に以前のインストールを削除します。 これは.NET の既定の動作です。
- nextSession: Administratorsグループのメンバーからの次のログオンセッションまで削除を延期します。
- その他: alwaysと同様の動作となります。
参考情報: 以前のバージョンを削除するタイミングを選択する