loadFromContext MDA
Not
Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.
Bağlama loadFromContext
bir derleme yüklenirse LoadFrom
yönetilen hata ayıklama yardımcısı (MDA) etkinleştirilir. Bu durum, çağrının Assembly.LoadFrom veya diğer benzer yöntemlerin bir sonucu olarak ortaya çıkabilir.
Belirtiler
Bazı yükleyici yöntemlerinin kullanılması, bağlama derlemelerin yüklenmesine LoadFrom
neden olabilir. Bu bağlamın kullanılması serileştirme, atama ve bağımlılık çözümlemesi için beklenmeyen davranışlara neden olabilir. Genel olarak, bu sorunlardan kaçınmak için bağlama derlemelerin yüklenmesi Load
önerilir. Bu MDA olmadan bir derlemenin hangi bağlama yüklendiğini belirlemek zordur.
Neden
Genel olarak, bir derleme, genel derleme LoadFrom
önbelleği veya AppDomainSetup.ApplicationBase özelliği gibi bağlamın dışındaki Load
bir yoldan yüklendiyse bağlama yüklenir.
Çözüm
Artık çağrılara gerek kalmayacak şekilde LoadFrom uygulamaları yapılandırın. Bunu yapmak için aşağıdaki teknikleri kullanabilirsiniz:
Derlemeleri genel derleme önbelleğine yükleyin.
Derlemeleri ApplicationBase için dizinine AppDomainyerleştirin. Varsayılan etki alanı söz konusu olduğunda, ApplicationBase işlemi başlatan yürütülebilir dosyayı içeren dizindir. Bu, derlemenin taşınması uygun değilse yeni AppDomain bir oluşturma da gerektirebilir.
Bağımlı derlemeler yürütülebilir dosyaya göre alt dizinlerdeyse, uygulama yapılandırma (.config) dosyanıza veya ikincil uygulama etki alanlarına bir yoklama yolu ekleyin.
Her durumda, kod yöntemini kullanacak Assembly.Load şekilde değiştirilebilir.
Çalışma Zamanı üzerindeki etkisi
MDA'nın CLR üzerinde herhangi bir etkisi yoktur. Bir yük isteğinin sonucu olarak kullanılan bağlamı bildirir.
Çıktı
MDA, derlemenin bağlama yüklendiğini LoadFrom
bildirir. Derlemenin basit adını ve yolunu belirtir. Ayrıca bağlamı kullanmaktan LoadFrom
kaçınmak için azaltmalar önerir.
Yapılandırma
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
Örnek
Aşağıdaki kod örneği, bu MDA'yi etkinleştirebilen bir durumu gösterir:
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// The following call caused the LoadFrom context to be used
// because the assembly is loaded using LoadFrom and the path is
// located outside of the Load context probing path.
Assembly.LoadFrom(@"C:\Text\Test.dll");
}
}
}