İngilizce dilinde oku

Aracılığıyla paylaş


Windows Shell tarafından başlatılan uygulamalar için ContentRootPath

özelliği, IHostEnvironment.ContentRootPath appsettings.json ve diğer içerik dosyalarının ASP.NET uygulamalar da dahil olmak üzere barındırılan bir uygulamaya yüklendiği varsayılan dizini temsil eder. Bu özelliğin değeri varsayılan olarak Environment.CurrentDirectoryuygulamanın geçerli çalışma dizinidir. Bu davranış, aynı uygulamanın farklı çalışma dizinleri altında yürütülmesini ve her dizindeki içeriği kullanmasını sağlar.

Bir Windows işlemi (uygulama veya hizmet) çalışma dizini belirtilmeden başlatıldığında, onu oluşturan işlemin çalışma dizini kullanılır. Windows Kabuğu'nun veya services.exe çalışma dizini %windir%\system32 (veya System özel klasör) dizinidir. Bu işlemlerden biri barındırılan bir uygulamayı başlattığındaContentRootPath, özellik %windir%\system32 olarak ayarlanır.

Bu davranış kafa karıştırıcıdır ve uygulama %windir%\system32 dizininden dosya yüklemeye çalıştığından barındırılan uygulamaların başarısız olmasına neden olur, ancak yok. Örneğin, appsettings.json dosyası çalışma zamanında bulunmaz ve ayarlar uygulanmaz.

.NET 7'den başlayarak, barındırılan bir uygulama geçerli dizin özel klasöre System ayarlanmış olarak başlatıldığında, özelliği varsayılan olarak ContentRootPath olarak AppContext.BaseDirectoryayarlanır.

Sürüm kullanıma sunulmuştur

.NET 7

Önceki davranış

Host.CreateDefaultBuilderContentRootPath, geçerli dizinin değerinden bağımsız olarak özelliğini Environment.CurrentDirectory olarak varsayılan olarak ayarlayın.

Yeni davranış

Host.CreateDefaultBuilderözelliği artık Windows'ta özel bir klasörse geçerli dizine System varsayılan olarak ContentRootPath ayarlamıyor. Bunun yerine uygulamanın temel dizini kullanılır.

Hataya neden olan değişikliğin türü

Bu değişiklik ikili uyumluluğu etkileyebilir.

Değişiklik nedeni

Uygulama geliştiricileri, belirli durumlarda uygulamaları Windows tarafından başlatıldığında (örneğin, uygulama MSIX olarak paketlendiğinde veya Başlat Menüsünden başlatıldığında) C:\Windows\system32 olmasını beklemiyorlardıContentRootPath. Bu gibi durumlarda, özelliği uygulamanın temel dizinine varsayılan olarak ContentRootPath ayarlamak daha iyidir.

Önceki davranışı kullanmak istiyorsanız, oluştururken IHostBuilderözelliğini açıkça ayarlayabilirsinizContentRootPath:

Host
    .CreateDefaultBuilder()
    .UseContentRoot(Environment.CurrentDirectory)
    ....

Etkilenen API’ler