Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Właściwość IHostEnvironment.ContentRootPath reprezentuje katalog domyślny, w którym appsettings.json i inne pliki zawartości są ładowane w hostowanej aplikacji, w tym w aplikacjach ASP.NET. Wartość tej właściwości jest domyślnie ustawiona na Environment.CurrentDirectory, który jest bieżącym katalogiem roboczym aplikacji. To zachowanie umożliwia wykonywanie tej samej aplikacji w różnych katalogach roboczych i używanie zawartości z każdego katalogu.
Po uruchomieniu procesu systemu Windows (aplikacji lub usługi) bez określania katalogu roboczego używany jest katalog roboczy procesu , który go utworzył . Katalog roboczy powłoki systemu Windows lub services.exe jest %windir%\system32 (lub System folder specjalny). Gdy którykolwiek z tych procesów uruchamia hostowaną aplikację, ContentRootPath właściwość jest ustawiona na %windir%\system32.
To zachowanie jest mylące i powoduje niepowodzenie hostowanych aplikacji, ponieważ aplikacja próbuje załadować pliki z katalogu %windir%\system32 , ale nie istnieje. Na przykład plik appsettings.json nie został znaleziony w czasie wykonywania i ustawienia nie są stosowane.
Począwszy od platformy .NET 7, gdy hostowana aplikacja jest uruchamiana z ustawionym bieżącym katalogiem jako System folder specjalny, właściwość ContentRootPath jest domyślnie ustawiana na AppContext.BaseDirectory.
Wersja wprowadzona
.NET 7
Poprzednie zachowanie
Host.CreateDefaultBuilder ustawiono właściwość ContentRootPath na domyślną wartość Environment.CurrentDirectory, niezależnie od wartości bieżącego katalogu.
Nowe zachowanie
Host.CreateDefaultBuilder Właściwość ContentRootPath nie jest już automatycznie ustawiana na bieżący katalog, jeśli System to folder specjalny w systemie Windows. Zamiast tego jest używany katalog podstawowy aplikacji.
Typ zmiany przełamującej
Ta zmiana może mieć wpływ na zgodność binarną.
Przyczyna zmiany
Deweloperzy aplikacji nie spodziewali się, że ścieżka ContentRootPath będzie aktywna, kiedy aplikacja była uruchamiana przez system Windows w określonych przypadkach (na przykład, gdy aplikacja była spakowana jako MSIX lub uruchamiana z menu Start). W takich przypadkach lepiej jest domyślnie ustawić ContentRootPath właściwość w katalogu podstawowym aplikacji.
Zalecana akcja
Jeśli chcesz użyć poprzedniego zachowania, możesz jawnie ustawić ContentRootPath właściwość podczas tworzenia elementu IHostBuilder:
Host
.CreateDefaultBuilder()
.UseContentRoot(Environment.CurrentDirectory)
....