IHostEnvironment.ContentRootPath プロパティは、appsettings.json およびその他のコンテンツ ファイルがホストされているアプリケーション (ASP.NET アプリを含む) に読み込まれる既定のディレクトリを表します。 このプロパティの値の既定値は、アプリケーションの現在の作業ディレクトリである Environment.CurrentDirectory です。 この動作により、同じアプリを異なる作業ディレクトリで実行し、各ディレクトリのコンテンツを使用できます。
作業ディレクトリを指定せずに Windows プロセス (アプリケーションまたはサービス) を起動すると、 それを作成 したプロセスの作業ディレクトリが使用されます。 Windows シェルまたは services.exe の作業ディレクトリは 、\system32 (または System 特殊フォルダー)%windir%。 これらのプロセスのいずれかがホストされたアプリを起動すると、 ContentRootPath プロパティは \system32%windir% に設定されます。
アプリケーションが %windir%\system32 ディレクトリからファイルを読み込もうとしますが、存在しないため、この動作は混乱し、ホストされているアプリケーションが失敗します。 たとえば、 appsettings.json ファイルは実行時に見つからず、設定は適用されません。
.NET 7 以降では、ホストされているアプリケーションが起動され、現在のディレクトリが System 特殊フォルダーに設定されると、既定で ContentRootPath プロパティが AppContext.BaseDirectoryされます。
導入されたバージョン
.NET 7
以前の動作
Host.CreateDefaultBuilder は、現在のディレクトリの値に関係なく、ContentRootPath プロパティを Environment.CurrentDirectory にデフォルトに設定しました。
新しい動作
Host.CreateDefaultBuilderWindows 上の ContentRootPath 特殊なフォルダーの場合、System プロパティは現在のディレクトリに既定で設定されなくなりました。 代わりに、アプリケーションのベース ディレクトリが使用されます。
破壊的変更の種類
この変更は 、バイナリの互換性に影響する可能性があります。
変更の理由
アプリ開発者は、アプリケーションが Windows によって起動された場合 (たとえば、アプリが MSIX としてパッケージ化されたときやスタート メニューから開始されたときなど) に、ContentRootPathが C:\Windows\system32 であるとは想定していませんでした。 このような場合は、 ContentRootPath プロパティをアプリケーションのベース ディレクトリに既定で設定することをお勧めします。
推奨されるアクション
前の動作を使用する場合は、ContentRootPathの作成時に IHostBuilder プロパティを明示的に設定できます。
Host
.CreateDefaultBuilder()
.UseContentRoot(Environment.CurrentDirectory)
....
影響を受ける API
.NET