AppDomain.CreateInstanceFrom Methode

Definition

Erstellt eine neue Instanz eines angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

Überlädt

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)
Veraltet.

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

CreateInstanceFrom(String, String, Object[])

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

CreateInstanceFrom(String, String)

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[], Evidence)

Achtung

Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes, System::Security::Policy::Evidence ^ securityAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
[System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")]
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes, System.Security.Policy.Evidence securityAttributes);
abstract member CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
[<System.Obsolete("Methods which use evidence to sandbox are obsolete and will be removed in a future release of the .NET Framework. Please use an overload of CreateInstanceFrom which does not take an Evidence parameter. See http://go.microsoft.com/fwlink/?LinkID=155570 for more information.")>]
abstract member CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] * System.Security.Policy.Evidence -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object(), securityAttributes As Evidence) As ObjectHandle

Parameter

assemblyFile
String

Der Name einschließlich des Pfads einer Datei, die eine Assembly enthält, in der der angeforderte Typ definiert ist. Die Assembly wird mit der LoadFrom(String)-Methode geladen.

typeName
String

Der vollqualifizierte Name des angeforderten Typs einschließlich des Namespace, jedoch ohne die Assembly, wie er von der FullName -Eigenschaft zurückgegeben wird.

ignoreCase
Boolean

Ein boolescher Wert, der angibt, ob bei der Suche die Groß-/Kleinschreibung beachtet werden soll.

bindingAttr
BindingFlags

Eine Kombination von 0 oder mehr Bitflags, die die Suche nach dem typeName-Konstruktor beeinflussen. Wenn bindingAttr 0 ist, wird eine Suche nach öffentlichen Konstruktoren mit Beachtung der Groß-/Kleinschreibung durchgeführt.

binder
Binder

Ein Objekt, das die Bindung, die Umwandlung von Argumenttypen, das Aufrufen von Membern und das Abrufen von MemberInfo-Objekten über Reflektion ermöglicht. Wenn binder den Wert null aufweist, wird der Standardbinder verwendet.

args
Object[]

Die an den Konstruktor zu übergebenden Argumente. Dieses Array von Argumenten muss hinsichtlich Anzahl, Reihenfolge und Typ mit den Parametern des aufzurufenden Konstruktors übereinstimmen. Wenn der parameterlose Konstruktor bevorzugt wird, muss args ein leeres Array oder NULL sein.

culture
CultureInfo

Kulturabhängige Informationen, die die Umwandlung von args in die für den typeName-Konstruktor deklarierten formalen Typen bestimmen. Wenn culture den Wert null hat, wird die CultureInfo des aktuellen Threads verwendet.

activationAttributes
Object[]

Ein Array mit einem oder mehreren Attributen, die an der Aktivierung beteiligt sein können. Üblicherweise ein Array, das ein einzelnes UrlAttribute-Objekt enthält, das die zum Aktivieren eines Remoteobjekts erforderliche URL angibt.

Der Parameter ist vom Client aktivierten Objekten zugeordnet. Die Clientaktivierung ist eine veraltete Technologie, die zum Zweck der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten, jedoch nicht für die Neuentwicklung empfohlen wird. Für verteilte Anwendungen sollte stattdessen Windows Communication Foundation verwendet werden.

securityAttributes
Evidence

Informationen, die zum Autorisieren der Erstellung von typeName verwendet werden.

Gibt zurück

Ein Objekt, das ein Wrapper für die neue Instanz ist, oder null, wenn typeName nicht gefunden wurde. Der Rückgabewert muss für den Zugriff auf das eigentliche Objekt entwrappt werden.

Implementiert

Attribute

Ausnahmen

assemblyFile ist null.

- oder -

typeName ist null.

Der Aufrufer kann keine Aktivierungsattribute für ein Objekt bereitstellen, das nicht von MarshalByRefObject erbt.

- oder -

securityAttributes ist nicht null. Wenn die Legacy-CAS-Richtlinie nicht aktiviert ist, sollte securityAttributes dem Wert null entsprechen.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.

assemblyFile wurde nicht gefunden.

typeName wurde in assemblyFile nicht gefunden.

Es wurde kein übereinstimmender öffentlicher Konstruktor gefunden.

Der Aufrufer hat keine ausreichende Berechtigung zum Aufrufen dieses Konstruktors.

assemblyFile ist keine gültige Assembly für die aktuell geladene Runtime.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.

Diese Instanz ist null.

Hinweise

Weitere Informationen zu dieser Methode finden Sie in der Activator.CreateInstanceFrom -Methode.

Wenn die CreateInstanceFrom -Methode verwendet wird, um eine instance in einer Zielanwendungsdomäne zu erstellen, die nicht die Anwendungsdomäne ist, von der aus der Aufruf erfolgt, wird die Assembly in die Zielanwendungsdomäne geladen. Wenn der instance jedoch in der aufrufenden Anwendungsdomäne entpackt wird, kann die Verwendung des entpackten instance auf bestimmte Weise dazu führen, dass die Assembly in die aufrufende Anwendungsdomäne geladen wird. Beispielsweise können nach dem Auspacken des instance seine Typinformationen angefordert werden, um die Methoden spät gebunden aufzurufen. Wenn die Assembly in die aufrufende Anwendungsdomäne geladen wird, können Ausnahmen auftreten.

  • Wenn zuvor eine andere Version derselben Assembly in die aufrufende Anwendungsdomäne geladen wurde oder wenn sich der Ladepfad der aufrufenden Anwendungsdomäne von dem der Zielanwendungsdomäne unterscheidet, können ausnahmen auftreten MissingMethodException .

  • Wenn die aufrufende Anwendungsdomäne frühzeitige Aufrufe des instance-Typs durchführt, kann ausgelöst werden, InvalidCastException wenn versucht wird, die instance.

Weitere Informationen

Gilt für:

CreateInstanceFrom(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object?[]? args, System.Globalization.CultureInfo? culture, object?[]? activationAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
member this.CreateInstanceFrom : string * string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As ObjectHandle

Parameter

assemblyFile
String

Der Name einschließlich des Pfads einer Datei, die eine Assembly enthält, in der der angeforderte Typ definiert ist. Die Assembly wird mit der LoadFrom(String)-Methode geladen.

typeName
String

Der vollqualifizierte Name des angeforderten Typs einschließlich des Namespace, jedoch ohne die Assembly, wie er von der FullName -Eigenschaft zurückgegeben wird.

ignoreCase
Boolean

Ein boolescher Wert, der angibt, ob bei der Suche die Groß-/Kleinschreibung beachtet werden soll.

bindingAttr
BindingFlags

Eine Kombination von 0 oder mehr Bitflags, die die Suche nach dem typeName-Konstruktor beeinflussen. Wenn bindingAttr 0 ist, wird eine Suche nach öffentlichen Konstruktoren mit Beachtung der Groß-/Kleinschreibung durchgeführt.

binder
Binder

Ein Objekt, das die Bindung, die Umwandlung von Argumenttypen, das Aufrufen von Membern und das Abrufen von MemberInfo-Objekten über Reflektion ermöglicht. Wenn binder den Wert null aufweist, wird der Standardbinder verwendet.

args
Object[]

Die an den Konstruktor zu übergebenden Argumente. Dieses Array von Argumenten muss hinsichtlich Anzahl, Reihenfolge und Typ mit den Parametern des aufzurufenden Konstruktors übereinstimmen. Wenn der parameterlose Konstruktor bevorzugt wird, muss args ein leeres Array oder NULL sein.

culture
CultureInfo

Kulturabhängige Informationen, die die Umwandlung von args in die für den typeName-Konstruktor deklarierten formalen Typen bestimmen. Wenn culture den Wert null hat, wird die CultureInfo des aktuellen Threads verwendet.

activationAttributes
Object[]

Ein Array mit einem oder mehreren Attributen, die an der Aktivierung beteiligt sein können. Üblicherweise ein Array, das ein einzelnes UrlAttribute-Objekt enthält, das die zum Aktivieren eines Remoteobjekts erforderliche URL angibt.

Der Parameter ist vom Client aktivierten Objekten zugeordnet. Die Clientaktivierung ist eine veraltete Technologie, die zum Zweck der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten, jedoch nicht für die Neuentwicklung empfohlen wird. Für verteilte Anwendungen sollte stattdessen Windows Communication Foundation verwendet werden.

Gibt zurück

Ein Objekt, das ein Wrapper für die neue Instanz ist, oder null, wenn typeName nicht gefunden wurde. Der Rückgabewert muss für den Zugriff auf das eigentliche Objekt entwrappt werden.

Ausnahmen

assemblyFile ist null.

- oder -

typeName ist null.

Der Aufrufer kann keine Aktivierungsattribute für ein Objekt bereitstellen, das nicht von MarshalByRefObject erbt.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.

assemblyFile wurde nicht gefunden.

typeName wurde in assemblyFile nicht gefunden.

Es wurde kein übereinstimmender öffentlicher Konstruktor gefunden.

Der Aufrufer hat keine ausreichende Berechtigung zum Aufrufen dieses Konstruktors.

assemblyFile ist keine gültige Assembly für die aktuell geladene Runtime.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.

Diese Instanz ist null.

Hinweise

Weitere Informationen finden Sie unter der Methode Activator.CreateInstanceFrom.

Wenn die CreateInstanceFrom -Methode verwendet wird, um eine instance in einer Zielanwendungsdomäne zu erstellen, die nicht die Anwendungsdomäne ist, von der aus der Aufruf erfolgt, wird die Assembly in die Zielanwendungsdomäne geladen. Wenn der instance jedoch in der aufrufenden Anwendungsdomäne entpackt wird, kann die Verwendung des entpackten instance auf bestimmte Weise dazu führen, dass die Assembly in die aufrufende Anwendungsdomäne geladen wird. Beispielsweise können nach dem Auspacken des instance seine Typinformationen angefordert werden, um die Methoden spät gebunden aufzurufen. Wenn die Assembly in die aufrufende Anwendungsdomäne geladen wird, können Ausnahmen auftreten.

  • Wenn zuvor eine andere Version derselben Assembly in die aufrufende Anwendungsdomäne geladen wurde oder wenn sich der Ladepfad der aufrufenden Anwendungsdomäne von dem der Zielanwendungsdomäne unterscheidet, können ausnahmen auftreten MissingMethodException .

  • Wenn die aufrufende Anwendungsdomäne frühzeitige Aufrufe des instance-Typs durchführt, kann ausgelöst werden, InvalidCastException wenn versucht wird, die instance.

Weitere Informationen

Gilt für:

CreateInstanceFrom(String, String, Object[])

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName, cli::array <System::Object ^> ^ activationAttributes);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName, object?[]? activationAttributes);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName, object[] activationAttributes);
member this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
abstract member CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string * obj[] -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String, activationAttributes As Object()) As ObjectHandle

Parameter

assemblyFile
String

Der Name einschließlich des Pfads einer Datei, die eine Assembly enthält, in der der angeforderte Typ definiert ist. Die Assembly wird mit der LoadFrom(String)-Methode geladen.

typeName
String

Der vollqualifizierte Name des angeforderten Typs einschließlich des Namespace, jedoch ohne die Assembly, wie er von der FullName -Eigenschaft zurückgegeben wird.

activationAttributes
Object[]

Ein Array mit einem oder mehreren Attributen, die an der Aktivierung beteiligt sein können. Üblicherweise ein Array, das ein einzelnes UrlAttribute-Objekt enthält, das die zum Aktivieren eines Remoteobjekts erforderliche URL angibt.

Der Parameter ist vom Client aktivierten Objekten zugeordnet. Die Clientaktivierung ist eine veraltete Technologie, die zum Zweck der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten, jedoch nicht für die Neuentwicklung empfohlen wird. Für verteilte Anwendungen sollte stattdessen Windows Communication Foundation verwendet werden.

Gibt zurück

Ein Objekt, das ein Wrapper für die neue Instanz ist, oder null, wenn typeName nicht gefunden wurde. Der Rückgabewert muss für den Zugriff auf das eigentliche Objekt entwrappt werden.

Implementiert

Ausnahmen

assemblyFile ist null.

assemblyFile wurde nicht gefunden.

typeName wurde in assemblyFile nicht gefunden.

Der Aufrufer hat keine ausreichende Berechtigung zum Aufrufen dieses Konstruktors.

Es wurde kein übereinstimmender öffentlicher Konstruktor gefunden.

Der Aufrufer kann keine Aktivierungsattribute für ein Objekt bereitstellen, das nicht von MarshalByRefObject erbt.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.

assemblyFile ist keine gültige Assembly für die derzeit geladene Runtime.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.

Diese Instanz ist null.

Hinweise

Der parameterlose Konstruktor für typeName wird aufgerufen.

Weitere Informationen zu dieser Methode finden Sie in der Activator.CreateInstanceFrom -Methode.

Wenn die CreateInstanceFrom -Methode verwendet wird, um eine instance in einer Zielanwendungsdomäne zu erstellen, die nicht die Anwendungsdomäne ist, aus der der Aufruf erfolgt, wird die Assembly in die Zielanwendungsdomäne geladen. Wenn die instance jedoch in der aufrufenden Anwendungsdomäne entpackt wird, kann die Verwendung des entpackten instance auf bestimmte Weise dazu führen, dass die Assembly in die aufrufende Anwendungsdomäne geladen wird. Nachdem die instance beispielsweise entpackt wurde, können die Typinformationen angefordert werden, um die Methoden spät gebunden aufzurufen. Wenn die Assembly in die aufrufende Anwendungsdomäne geladen wird, können Ausnahmen auftreten.

  • Wenn zuvor eine andere Version derselben Assembly in die aufrufende Anwendungsdomäne geladen wurde oder sich der Ladepfad der aufrufenden Anwendungsdomäne von dem der Zielanwendungsdomäne unterscheidet, können Ausnahmen auftreten MissingMethodException .

  • Wenn die aufrufende Anwendungsdomäne frühzeitig gebundene Aufrufe des instance-Typs durchführt, kann ausgelöst werden, wenn versucht wird, InvalidCastException die instance.

Weitere Informationen

Gilt für:

CreateInstanceFrom(String, String)

Source:
AppDomain.cs
Source:
AppDomain.cs
Source:
AppDomain.cs

Erstellt eine neue Instanz des angegebenen Typs, der in der angegebenen Assemblydatei definiert ist.

public:
 System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public:
 virtual System::Runtime::Remoting::ObjectHandle ^ CreateInstanceFrom(System::String ^ assemblyFile, System::String ^ typeName);
public System.Runtime.Remoting.ObjectHandle? CreateInstanceFrom (string assemblyFile, string typeName);
public System.Runtime.Remoting.ObjectHandle CreateInstanceFrom (string assemblyFile, string typeName);
member this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
abstract member CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
override this.CreateInstanceFrom : string * string -> System.Runtime.Remoting.ObjectHandle
Public Function CreateInstanceFrom (assemblyFile As String, typeName As String) As ObjectHandle

Parameter

assemblyFile
String

Der Name einschließlich des Pfads einer Datei, die eine Assembly enthält, in der der angeforderte Typ definiert ist. Die Assembly wird mit der LoadFrom(String)-Methode geladen.

typeName
String

Der vollqualifizierte Name des angeforderten Typs einschließlich des Namespace, jedoch ohne die Assembly, wie er von der FullName -Eigenschaft zurückgegeben wird.

Gibt zurück

Ein Objekt, das ein Wrapper für die neue Instanz ist, oder null, wenn typeName nicht gefunden wurde. Der Rückgabewert muss für den Zugriff auf das eigentliche Objekt entwrappt werden.

Implementiert

Ausnahmen

assemblyFile ist null.

- oder -

typeName ist null.

assemblyFile wurde nicht gefunden.

typeName wurde in assemblyFile nicht gefunden.

Der Vorgang wird für eine entladene Anwendungsdomäne ausgeführt.

Es wurde kein parameterloser öffentlicher Konstruktor gefunden.

Der Aufrufer hat keine ausreichende Berechtigung zum Aufrufen dieses Konstruktors.

assemblyFile ist keine gültige Assembly für die derzeit geladene Runtime.

Eine Assembly oder ein Modul wurde zweimal mit zwei unterschiedlichen Beweisen geladen.

Diese Instanz ist null.

Beispiele

Das folgende Beispiel zeigt, wie Sie mithilfe der CreateInstanceFrom(String, String) Methodenüberladung eine instance eines Objekts in einer Zielanwendungsdomäne erstellen und dessen Methoden aufrufen.

Im Beispiel wird die MarshalableExample -Klasse definiert, die über Anwendungsdomänengrenzen hinweg gemarshallt werden kann. Im Beispiel wird ein Pfad zur derzeit ausgeführten Assembly erstellt, eine Zielanwendungsdomäne erstellt und die CreateInstanceFrom(String, String) Methodenüberladung verwendet, um die Beispielassembly in die Zielanwendungsdomäne zu laden und eine instance von MarshalableExamplezu erstellen.

Hinweis

Der Pfad ist in diesem Beispiel absolut, aber ein relativer Pfad würde auch funktionieren, da die Assembly.LoadFrom -Methode zum Laden der Assembly verwendet wird.

Nach dem Entpacken des Objekthandles werden im Beispiel drei Möglichkeiten zur Verwendung eines Objekts in einer Zielanwendungsdomäne veranschaulicht:

  • Aufrufen einer Methode mit verspäteter Bindung mithilfe von Reflektion. Dies erfordert Typinformationen, die dazu führen, dass die Assembly in die Anwendungsdomäne des Aufrufers geladen wird. (In diesem Beispiel ist es bereits geladen.)

  • Umwandeln des Objekts in eine Schnittstelle, die sowohl dem Aufrufer als auch dem Aufgerufenen bekannt ist. Wenn die Schnittstelle in der aufrufenden Assembly oder in einer dritten Assembly definiert ist, auf die sowohl der Aufrufer als auch der Aufgerufene verweist, wird die aufgerufene Assembly nicht in die Anwendungsdomäne des Aufrufers geladen.

  • Direkte Verwendung des Objekts, wenn sein Typ dem Aufrufer bekannt ist. Die Assembly muss in die Anwendungsdomäne des Aufrufers geladen werden.

Eine weitere Möglichkeit, das Laden der aufgerufenen Assembly in die Anwendungsdomäne des Aufrufers zu vermeiden, besteht darin, dass der Aufrufer von der MarshalByRefObject -Klasse ableiten und eine Methode definiert, die in der Zielanwendungsdomäne ausgeführt werden kann. Diese Methode kann reflektion verwenden, um eine Zielassembly zu untersuchen, da die Zielassembly bereits in die Zielanwendungsdomäne geladen ist. Sehen Sie sich das Beispiel für die -Eigenschaft an DynamicDirectory .

using namespace System;

public interface class ITest
{
    void Test(String^ greeting);
};

public ref class MarshalableExample : MarshalByRefObject, ITest
{
public:
    virtual void Test(String^ greeting)
    {
        Console::WriteLine("{0} from '{1}'!", greeting,
            AppDomain::CurrentDomain->FriendlyName);
    }
};

void main()
{
    // Construct a path to the current assembly.
    String^ assemblyPath = Environment::CurrentDirectory + "\\" +
        MarshalableExample::typeid->Assembly->GetName()->Name + ".exe";

    AppDomain^ ad = AppDomain::CreateDomain("MyDomain");
 
    System::Runtime::Remoting::ObjectHandle^ oh = 
        ad->CreateInstanceFrom(assemblyPath, "MarshalableExample");

    Object^ obj = oh->Unwrap();


    // Three ways to use the newly created object, depending on how
    // much is known about the type: Late bound, early bound through 
    // a mutually known interface, or early binding of a known type.
    //
    obj->GetType()->InvokeMember("Test", 
        System::Reflection::BindingFlags::InvokeMethod, 
        Type::DefaultBinder, obj, gcnew array<Object^> { "Hello" });

    ITest^ it = (ITest^) obj;
    it->Test("Hi");

    MarshalableExample^ ex = (MarshalableExample^) obj;
    ex->Test("Goodbye");
}

/* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 */
using System;

public interface ITest
{
    void Test(string greeting);
}

public class MarshalableExample : MarshalByRefObject, ITest
{
    static void Main()
    {
        // Construct a path to the current assembly.
        string assemblyPath = Environment.CurrentDirectory + "\\" +
            typeof(MarshalableExample).Assembly.GetName().Name + ".exe";

        AppDomain ad = AppDomain.CreateDomain("MyDomain");

        System.Runtime.Remoting.ObjectHandle oh =
            ad.CreateInstanceFrom(assemblyPath, "MarshalableExample");

        object obj = oh.Unwrap();

        // Three ways to use the newly created object, depending on how
        // much is known about the type: Late bound, early bound through
        // a mutually known interface, or early binding of a known type.
        //
        obj.GetType().InvokeMember("Test",
            System.Reflection.BindingFlags.InvokeMethod,
            Type.DefaultBinder, obj, new object[] { "Hello" });

        ITest it = (ITest) obj;
        it.Test("Hi");

        MarshalableExample ex = (MarshalableExample) obj;
        ex.Test("Goodbye");
    }

    public void Test(string greeting)
    {
        Console.WriteLine("{0} from '{1}'!", greeting,
            AppDomain.CurrentDomain.FriendlyName);
    }
}

/* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 */
open System

type ITest =
    abstract Test: string -> unit

type MarshalableExample() =
    inherit MarshalByRefObject()
    
    member _.Test greeting =
        printfn $"{greeting} from '{AppDomain.CurrentDomain.FriendlyName}'!"

    interface ITest with
        member this.Test message = this.Test message 

// Construct a path to the current assembly.
let assemblyPath = 
    Environment.CurrentDirectory + "\\" + typeof<MarshalableExample>.Assembly.GetName().Name + ".exe"

let ad = AppDomain.CreateDomain "MyDomain"

let oh =
    ad.CreateInstanceFrom(assemblyPath, "MarshalableExample")

let obj = oh.Unwrap()

// Three ways to use the newly created object, depending on how
// much is known about the type: Late bound, early bound through
// a mutually known interface, or early binding of a known type.
//
obj.GetType().InvokeMember("Test",
    System.Reflection.BindingFlags.InvokeMethod,
    Type.DefaultBinder, obj, [| box "Hello" |])
|> ignore

let it = obj :?> ITest
it.Test "Hi"

let ex = obj :?> MarshalableExample
ex.Test("Goodbye")

(* This example produces the following output:

Hello from 'MyDomain'!
Hi from 'MyDomain'!
Goodbye from 'MyDomain'!
 *)
Public Interface ITest

    Sub Test(ByVal greeting As String)
End Interface

Public Class MarshalableExample 
    Inherits MarshalByRefObject
    Implements ITest

    Shared Sub Main()
    
        ' Construct a path to the current assembly.
        Dim assemblyPath As String = Environment.CurrentDirectory & "\" &
            GetType(MarshalableExample).Assembly.GetName().Name & ".exe"

        Dim ad As AppDomain = AppDomain.CreateDomain("MyDomain")
 
        Dim oh As System.Runtime.Remoting.ObjectHandle = 
            ad.CreateInstanceFrom(assemblyPath, "MarshalableExample")

        Dim obj As Object = oh.Unwrap()


        ' Three ways to use the newly created object, depending on how
        ' much is known about the type: Late bound, early bound through 
        ' a mutually known interface, or early binding of a known type.
        '
        obj.GetType().InvokeMember("Test", 
            System.Reflection.BindingFlags.InvokeMethod, 
            Type.DefaultBinder, obj, New Object() { "Hello" })

        Dim it As ITest = CType(obj, ITest) 
        it.Test("Hi")

        Dim ex As MarshalableExample = CType(obj, MarshalableExample) 
        ex.Test("Goodbye")
    End Sub

    Public Sub Test(ByVal greeting As String) Implements ITest.Test
    
        Console.WriteLine("{0} from '{1}'!", greeting,
            AppDomain.CurrentDomain.FriendlyName)
    End Sub
End Class

' This example produces the following output:
'
'Hello from 'MyDomain'!
'Hi from 'MyDomain'!
'Goodbye from 'MyDomain'!

Hinweise

Der parameterlose Konstruktor für typeName wird aufgerufen.

Weitere Informationen finden Sie unter der Methode Activator.CreateInstanceFrom.

Wenn die CreateInstanceFrom -Methode verwendet wird, um eine instance in einer Zielanwendungsdomäne zu erstellen, die nicht die Anwendungsdomäne ist, aus der der Aufruf erfolgt, wird die Assembly in die Zielanwendungsdomäne geladen. Wenn die instance jedoch in der aufrufenden Anwendungsdomäne entpackt wird, kann die Verwendung des entpackten instance auf bestimmte Weise dazu führen, dass die Assembly in die aufrufende Anwendungsdomäne geladen wird. Nachdem die instance beispielsweise entpackt wurde, können die Typinformationen angefordert werden, um die Methoden spät gebunden aufzurufen. Wenn die Assembly in die aufrufende Anwendungsdomäne geladen wird, können Ausnahmen auftreten.

  • Wenn zuvor eine andere Version derselben Assembly in die aufrufende Anwendungsdomäne geladen wurde oder sich der Ladepfad der aufrufenden Anwendungsdomäne von dem der Zielanwendungsdomäne unterscheidet, können Ausnahmen auftreten MissingMethodException .

  • Wenn die aufrufende Anwendungsdomäne frühzeitig gebundene Aufrufe des instance-Typs durchführt, kann ausgelöst werden, wenn versucht wird, InvalidCastException die instance.

Weitere Informationen

Gilt für: