Выполнение кода в другом домене приложения 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Выполнение кода в другом домене приложения



После загрузки сборки в домен приложения можно выполнить содержащийся в ней код. Наиболее простой способ выполнения кода заключается в использовании AssemblyLoad, что позволяет загрузить сборку в текущий домен приложения и начать выполнение кода в точке входа сборки по умолчанию.

Для загрузки сборки в другой домен приложения используется ExecuteAssembly или ExecuteAssemblyByName, или одна из других перегруженных версий этих методов.

Чтобы выполнить другую сборку с точки, отличной от точки входа по умолчанию, определите новый тип в удаленной сборке, производной от MarshalByRefObject. Затем используйте CreateInstance для создания экземпляра такого типа в своем приложении.

Рассмотрите следующий файл, создающий сборку, состоящую из одного пространства имен и двух классов. Допустим, что эта сборка была построена и сохранена на диске C под именем HelloWorldRemote.exe.

 

 

ß------


To access the code from another application, you can either load the assembly into the current application domain or create a new application domain and load the assembly into it. If you load the assembly into the current application domain with Assembly.LoadFrom, you can use Assembly.CreateInstance to instantiate an instance of the RemoteObject class, which causes the object constructor to be executed.

static void Main() { // Load the assembly into the current appdomain: System.Reflection.Assembly newAssembly = System.Reflection.Assembly.LoadFrom(@"c:\HelloWorldRemote.exe");   // Instantiate RemoteObject: newAssembly.CreateInstance("HelloWorldRemote.RemoteObject"); }

When loading the assembly into a separate application domain, use AppDomain.ExecuteAssembly to access the default entry point or AppDomain.CreateInstance to create an instance of the RemoteObject class. Creating the instance causes the constructor to be executed.

static void Main() { 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"); }

If you do not want to load the assembly programmatically, use Add Reference from the Solution Explorer to specify the assembly HelloWorldRemote.exe. Then, add a using HelloWorldRemote; directive to the using block of your application, and use the RemoteObject type in your program to declare an instance of the RemoteObject object, like this:

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

Чтобы получить доступ к коду из другого приложения, можно либо загрузить сборку в текущий домен приложения, или создать новый домен приложения и загрузить сборку в него. Если сборка загружена в текущий домен приложения Assembly.LoadFrom, то можно использовать Assembly.CreateInstance для создания экземпляра класса RemoteObject, что приводит к выполнению конструктора объекта.

ß-----

 

При загрузке сборки в отдельный домен приложения для доступа к точке входа по умолчанию используйте AppDomain.ExecuteAssembly, а для создания экземпляра класса RemoteObject используйте AppDomain.CreateInstance. Создание экземпляра приводит к выполнению конструктора.

ß-----

 

 

Если сборку не требуется загружать программными средствами, используйте команду Добавить ссылку в Обозревателе решений, чтобы указать сборку HelloWorldRemote.exe. Затем, добавьте директиву using HelloWorldRemote; к блоку using приложения, и используйте тип RemoteObject в программе для объявления экземпляра объекта RemoteObject (см. ниже):

ß---



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 103; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.182.45 (0.005 с.)