Aracılığıyla paylaş


Varsayılan sondaj

Örnek AssemblyLoadContext.Default , bir derlemenin bağımlılıklarını bulmakla sorumludur. Bu makalede AssemblyLoadContext.Default örneğinin yoklama mantığı açıklanmaktadır.

Sunucu yapılandırılmış arama özellikleri

Çalışma zamanı başlatıldığında, çalışma zamanı ana bilgisayarı AssemblyLoadContext.Default sondalama yollarını yapılandıran bir dizi adlandırılmış sondalama özelliği sağlar.

Her yoklama özelliği isteğe bağlıdır. Varsa, her özellik mutlak yolların sınırlandırılmış listesini içeren bir dize değeridir. Sınırlayıcı Windows'ta ';' ve diğer tüm platformlarda ':' şeklindedir.

Özellik Adı Description
TRUSTED_PLATFORM_ASSEMBLIES Platform ve uygulama derleme dosyası yollarının listesi.
PLATFORM_RESOURCE_ROOTS Uydu kaynak derlemelerini aramak için dizin yollarının listesi.
NATIVE_DLL_SEARCH_DIRECTORIES Yönetilmeyen (yerel) kitaplıkları aramak için dizin yollarının listesi.
APP_PATHS Yönetilen derlemeleri aramak için dizin yollarının listesi.

Özellikler nasıl doldurulur?

Myapp.deps.jsondosyasının mevcut olup olmamasına bağlı olarak özellikleri doldurmaya <yönelik iki ana senaryo vardır.>

  • *.deps.json dosyası mevcut olduğunda, yoklama özelliklerini doldurmak için ayrıştırılır.
  • *.deps.json dosyası olmadığında, uygulamanın dizininin tüm bağımlılıkları içerdiği varsayılır. Dizinin içeriği, yoklama özelliklerini doldurmak için kullanılır.

Ayrıca, başvuruda bulunılan çerçeveler için *.deps.json dosyaları benzer şekilde ayrıştırılır.

Ortam değişkeni DOTNET_ADDITIONAL_DEPS ek bağımlılıklar eklemek için kullanılabilir. dotnet.exe ayrıca, uygulama başlangıcında bu değeri ayarlamak için isteğe bağlı --additional-deps bir parametre içerir.

Uyarı

Ortam DOTNET_ADDITIONAL_DEPS değişkeni ve --additional-deps komut satırı seçeneği yalnızca çerçeveye bağımlı uygulamalar için geçerlidir. Bu seçenekler bağımsız uygulamalar için yoksayılır. Daha fazla bilgi için bkz. Çerçeveye bağımlı ve bağımsız dağıtımlar.

APP_PATHS Özelliği varsayılan olarak doldurulmuyor ve çoğu uygulama için atlanıyor.

Uygulama tarafından kullanılan tüm *.deps.json dosyalarının listesine aracılığıyla System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")erişilebilir.

Yönetilen koddan yoklama özelliklerini nasıl görebilirim?

Her özellik, yukarıdaki tablodan AppContext.GetData(String) özellik adıyla işlevini çağırarak kullanılabilir.

Sorgulama özelliklerinin yapısını nasıl hata gideririm?

Belirli ortam değişkenleri etkinleştirildiğinde .NET Core çalışma zamanı konağı yararlı izleme iletileri oluşturur:

Ortam değişkeni Description
DOTNET_HOST_TRACE=1 İzlemeyi etkinleştirir.
DOTNET_HOST_TRACEFILE=<path> Varsayılan stderryerine bir dosya yolunu izler.
DOTNET_HOST_TRACE_VERBOSITY Ayrıntı düzeyini 1 (en düşük) ile 4 (en yüksek) arasında ayarlar.

Daha fazla bilgi için bkz. DOTNET_HOST_TRACE ortam değişkenleri.

Yönetilen derleme varsayılan yoklama

Yönetilen bir derlemenin yerini belirlemek üzere yoklama yapılırken, AssemblyLoadContext.Default şu sırayla kontrol edilir:

  • AssemblyName.Name içindeki TRUSTED_PLATFORM_ASSEMBLIES ile eşleşen dosyalar (dosya uzantıları kaldırıldıktan sonra).
  • APP_PATHS içinde, ortak dosya uzantılarına sahip derleme dosyaları.

varsayılan AssemblyLoadContextiçinde yüklenirken, içinde TRUSTED_PLATFORM_ASSEMBLIES bulunan derlemeler veya APP_PATHS belirtilen bir yol veya ham derleme nesnesi üzerinde önceliklidir. Örneğin, AssemblyLoadContext.LoadFromStream veya AssemblyLoadContext.LoadFromAssemblyPath öğesini varsayılan AssemblyLoadContext üzerinde çağırırsanız ve TRUSTED_PLATFORM_ASSEMBLIES veya APP_PATHS içinde adı eşleşen bir derleme varsa, çalışma zamanı derlemeyi belirtilen akıştan veya yoldan değil bu konumlardan yükler.

Uydu (kaynak) montaj incelemesi

Belirli bir kültüre ait bir uydu derlemesini bulmak için bir dizi dosya yolu oluşturabilirsiniz.

PLATFORM_RESOURCE_ROOTS ve ardından APP_PATHS içindeki her yol için art arda CultureInfo.Name dizesini, dizin ayırıcısını, AssemblyName.Name dizesini ve '.dll' uzantısını ekleyin.

Eşleşen bir dosya varsa yüklemeyi ve döndürmeyi deneme.

Yönetilmeyen (yerel) kitaplık tarama

Çalışma zamanının yönetilmeyen kitaplık yoklama algoritması tüm platformlarda aynıdır. Ancak, yönetilmeyen kitaplığın gerçek yükü temel alınan platform tarafından gerçekleştirildiğinden gözlemlenen davranış biraz farklı olabilir.

  1. Sağlanan kitaplık adının mutlak veya göreli bir yolu temsil ediyor olup olmadığını denetleyin.

  2. Ad mutlak bir yolu temsil ediyorsa, sonraki tüm işlemler için adı doğrudan kullanın. Aksi takdirde, adı kullanın ve dikkate almak için platform tanımlı birleşimler oluşturun. Birleşimler, platforma özgü ön eklerden (örneğin, lib) ve/veya soneklerden (örneğin, .dll, .dylibve .so) oluşur. Bu kapsamlı bir liste değildir ve her platformda yapılan tam çabayı temsil etmez. Bu yalnızca düşünülenlerin bir örneğidir. Daha fazla bilgi için bkz. yerel kitaplık yükleme.

  3. İsim ve yol göreliyse, her bir birleşim aşağıdaki adımlarda kullanılır. İlk başarılı yükleme girişimi, hemen yüklenen kitaplığın tutamacını döndürür.

    • Özelliğinde NATIVE_DLL_SEARCH_DIRECTORIES sağlanan her yola ekleyip yüklemeyi deneme.

    • Çağrı derlemesinde tanımlanmamışsa veya p/invoke ise ya da tanımlanmış olup DefaultDllImportSearchPathsAttribute içeriyorsa, adı veya bileşimi çağrı derlemesinin dizinine ekleyin ve yüklemeyi deneyin.

    • Kitaplığı yüklemek için doğrudan kullanın.

  4. Kitaplığın yüklenemediğine işaret edin.