Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Egenskapen IHostEnvironment.ContentRootPath representerar standardkatalogen där appsettings.json och andra innehållsfiler läses in i ett värdbaserat program, inklusive ASP.NET appar. Den här egenskapens värde är standardvärdet Environment.CurrentDirectory, vilket är programmets aktuella arbetskatalog. Det här beteendet gör att samma app kan köras under olika arbetskataloger och använda innehållet från varje katalog.
När en Windows-process (antingen program eller tjänst) startas utan att en arbetskatalog anges används arbetskatalogen för den process som skapade den . Arbetskatalogen för Windows Shell eller services.exe är %windir%\system32 (eller specialmappen System ). När någon av dessa processer startar en värdbaserad app ContentRootPath är egenskapen inställd på %windir%\system32.
Det här beteendet är förvirrande och gör att värdbaserade program misslyckas eftersom programmet försöker läsa in filer från katalogen%windir%\system32 , men det finns inte. Det går till exempel inte att hitta appsettings.json-filen under körning och inställningarna tillämpas inte.
Från och med .NET 7, när ett värdbaserat program startas med den aktuella katalogen inställd på specialmappen System, ställs ContentRootPath-egenskapen automatiskt in på AppContext.BaseDirectory.
Version lanserad
.NET 7
Tidigare beteende
Host.CreateDefaultBuilder angav ContentRootPath-egenskapen som standardvärde till Environment.CurrentDirectory, oavsett värdet i den aktuella katalogen.
Nytt beteende
Host.CreateDefaultBuilder inte längre standardinställningen för ContentRootPath egenskapen till den aktuella katalogen om det är specialmappen System i Windows. I stället används programmets baskatalog.
Typ av brytande ändring
Den här ändringen kan påverka binär kompatibilitet.
Orsak till ändring
Apputvecklare förväntade sig ContentRootPath inte att vara C:\Windows\system32 när deras program startades av Windows i vissa fall (till exempel när appen paketerades som en MSIX eller startades från Start-menyn). I dessa fall är det bättre att sätta ContentRootPath-egenskapen till programmets baskatalog som standard.
Rekommenderad åtgärd
Om du vill använda det tidigare beteendet kan du ange ContentRootPath egenskapen explicit när du IHostBuilderskapar :
Host
.CreateDefaultBuilder()
.UseContentRoot(Environment.CurrentDirectory)
....