Markieren Sie das Kontrollkästchen Englisch, um die englische Version dieses Artikels anzuzeigen. Sie können den englischen Text auch in einem Popup-Fenster einblenden, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch
Informationen
Das angeforderte Thema wird unten angezeigt. Es ist jedoch nicht in dieser Bibliothek vorhanden.
Es wird empfohlen, Visual Studio 2017 zu verwenden

Ausführen von Code in einer anderen Anwendungsdomäne (C# und Visual Basic)

Sobald eine Assembly in eine Anwendungsdomäne geladen worden ist, kann der in der Assembly enthaltene Code ausgeführt werden. Der einfachste Weg zum Laden einer Assembly ist die Verwendung von AssemblyLoad, wodurch die Assembly in die aktuelle Anwendungsdomäne geladen wird und der Code ab dem Standardeinstiegspunkt der Assembly ausgeführt wird.

Wenn Sie die Assembly in eine andere Anwendungsdomäne laden möchten, verwenden Sie ExecuteAssembly oder ExecuteAssemblyByName oder eine der anderen überladenen Versionen dieser Methoden.

Wenn Sie möchten, dass die Assembly an einem anderen Punkt als am Standardeinstiegspunkt mit dem Ausführen des Codes beginnt, definieren Sie in der Remoteassembly einen neuen, von MarshalByRefObject abgeleiteten Typ. Erstellen Sie anschließend mit CreateInstance eine Instanz dieses Typs in der Anwendung.

Der folgende Code erstellt eine Assembly, die aus einem einzelnen Namespace und zwei Klassen besteht. Fügen Sie den Code in eine Visual Studio-Konsolenanwendung mit dem Namen HelloWorldRemote ein, erstellen Sie die Lösung oder führen Sie diese aus, und schließen Sie sie dann. Suchen Sie die Datei HelloWorldRemote.exe im obj/Debug-Ordner des Projekts, und kopieren Sie die Datei auf Laufwerk C:.


// This namespace contains code to be called.
namespace HelloWorldRemote
{
    public class RemoteObject : System.MarshalByRefObject
    {
        public RemoteObject()
        {
            System.Console.WriteLine("Hello, World! (RemoteObject Constructor)");
        }
    }
    class Program
    {
        static void Main()
        {
            System.Console.WriteLine("Hello, World! (Main method)");
        }
    }
}


Um von einer anderen Anwendung auf den Code zuzugreifen, können Sie entweder die Assembly in die aktuelle Anwendungsdomäne laden, oder Sie können eine neue Anwendungsdomäne erstellen und die Assembly darin laden.

Um die Assembly in die aktuelle Anwendungsdomäne zu laden, indem Sie Assembly.LoadFrom verwenden, können Sie Assembly.CreateInstance verwenden, um eine Instanz der RemoteObject-Klasse zu instanziieren. Die Instanziierung bewirkt, dass der Objektkonstruktor ausgeführt wird.


// Load the assembly into the current appdomain:
System.Reflection.Assembly newAssembly = System.Reflection.Assembly.LoadFrom(@"c:\HelloWorldRemote.exe");

// Instantiate RemoteObject:
newAssembly.CreateInstance("HelloWorldRemote.RemoteObject");


Um die Assembly in eine andere Anwendungsdomäne zu laden, verwenden Sie AppDomain.ExecuteAssembly, um auf den Standardeinstiegspunkt zuzugreifen oder AppDomain.CreateInstance, um eine Instanz der RemoteObject-Klasse zu erstellen. Durch das Erstellen der Instanz wird der Konstruktor ausgeführt.

Hinweis Hinweis

Weitere Informationen zu den Nachteilen der Verwendung von Assembly.LoadFrom finden Sie im Hinweisabschnitt von Assembly.LoadFrom(String).


System.AppDomain NewAppDomain = System.AppDomain.CreateDomain("NewApplicationDomain");

// Load the assembly and call the default entry point:
NewAppDomain.ExecuteAssembly(@"c:\HelloWorldRemote.exe");

// Create an instance of RemoteObject:
NewAppDomain.CreateInstanceFrom(@"c:\HelloWorldRemote.exe", "HelloWorldRemote.RemoteObject");


Wenn Sie die Assembly nicht programmgesteuert laden möchten, geben Sie die Assembly HelloWorldRemote.exe im Projektmappen-Explorer mit Verweis hinzufügen an. Fügen Sie in C# eine using HelloWorldRemote;-Direktive, in Visual Basic eine Imports HelloWorldRemote-Anweisung hinzu. Verwenden Sie dann den RemoteObject-Typ in Ihrem Programm, um eine Instanz des RemoteObject-Objekts wie im folgenden Beispiel zu deklarieren.


// This code creates an instance of RemoteObject, 
// assuming HelloWorldRemote has been added as a reference:
HelloWorldRemote.RemoteObject o = new HelloWorldRemote.RemoteObject();


Anzeigen: