Aracılığıyla paylaş


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 staticSystem.Reflection.Assembly. Derlemelerin yüklenebileceği diğer yöntemler şunlardır:

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.

  • GetType sınıfının yöntemi Type derlemeleri 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

Ayrıca bkz.