Nasıl yapılır: Uygulama Etki Alanına Derlemeler Yükleme
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.
Bir derlemeyi uygulama etki alanına yüklemenin çeşitli yolları vardır. Önerilen yol, sınıfının (Shared
Visual Basic'te) Load yöntemini kullanmaktır static
System.Reflection.Assembly. Derlemelerin yüklenebileceği diğer yöntemler şunlardır:
LoadFrom sınıfının yöntemiAssembly, dosya konumuna göre bir derlemeyi yükler. Derlemeleri bu yöntemle yüklemek farklı bir yük bağlamı kullanır.
ReflectionOnlyLoad ve ReflectionOnlyLoadFrom yöntemleri, bir derlemeyi yalnızca yansıma bağlamı içine yükler. Bu bağlama yüklenen derlemeler incelenebilir ancak yürütülemez, böylece diğer platformları hedefleyen derlemelerin incelenmesine olanak tanır. Bkz . Nasıl yapılır: Derlemeleri Yalnızca Yansıma Bağlamı'na Yükleme.
Not
Yalnızca yansıma bağlamı .NET Framework sürüm 2.0'da yenidir.
ve CreateInstanceAndUnwrapAppDomain sınıfı gibi CreateInstance yöntemler derlemeleri bir uygulama etki alanına yükleyebilir.
Load sınıfının yöntemi System.AppDomain derlemeleri yükleyebilir, ancak öncelikle COM birlikte çalışabilirliği için kullanılır. Derlemeleri çağrıldığı uygulama etki alanı dışında bir uygulama etki alanına yüklemek için kullanılmamalıdır.
Not
.NET Framework sürüm 2.0'dan başlayarak, çalışma zamanı şu anda yüklü olan çalışma zamanından daha yüksek bir sürüm numarasına sahip .NET Framework sürümüyle derlenmiş bir derlemeyi yüklemez. Bu, sürüm numarasının ana ve ikincil bileşenlerinin birleşimi için geçerlidir.
Yüklenen derlemelerden tam zamanında (JIT) derlenmiş kodun uygulama etki alanları arasında nasıl paylaşılacağını belirtebilirsiniz. Daha fazla bilgi için bkz . Uygulama etki alanları ve derlemeleri.
Örnek
Aşağıdaki kod geçerli uygulama etki alanına "example.exe" veya "example.dll" adlı bir derleme yükler, derlemeden adlı Example
bir tür alır, bu tür için adlı MethodA
bir parametresiz yöntem alır ve yöntemini yürütür. Yüklenen bir derlemeden bilgi alma hakkında eksiksiz bir tartışma için bkz . Türleri Dinamik Olarak Yükleme ve Kullanma.
using namespace System;
using namespace System::Reflection;
public ref class Asmload0
{
public:
static void Main()
{
// Use the file name to load the assembly into the current
// application domain.
Assembly^ a = Assembly::Load("example");
// Get the type to use.
Type^ myType = a->GetType("Example");
// Get the method to call.
MethodInfo^ myMethod = myType->GetMethod("MethodA");
// Create an instance.
Object^ obj = Activator::CreateInstance(myType);
// Execute the method.
myMethod->Invoke(obj, nullptr);
}
};
int main()
{
Asmload0::Main();
}
using System;
using System.Reflection;
public class Asmload0
{
public static void Main()
{
// Use the file name to load the assembly into the current
// application domain.
Assembly a = Assembly.Load("example");
// Get the type to use.
Type myType = a.GetType("Example");
// Get the method to call.
MethodInfo myMethod = myType.GetMethod("MethodA");
// Create an instance.
object obj = Activator.CreateInstance(myType);
// Execute the method.
myMethod.Invoke(obj, null);
}
}
Imports System.Reflection
Public Class Asmload0
Public Shared Sub Main()
' Use the file name to load the assembly into the current
' application domain.
Dim a As Assembly = Assembly.Load("example")
' Get the type to use.
Dim myType As Type = a.GetType("Example")
' Get the method to call.
Dim myMethod As MethodInfo = myType.GetMethod("MethodA")
' Create an instance.
Dim obj As Object = Activator.CreateInstance(myType)
' Execute the method.
myMethod.Invoke(obj, Nothing)
End Sub
End Class