Ładowanie bibliotek DLL do osobnej domeny AppDomain
Chcę załadować jedną lub więcej bibliotek DLL dynamicznie, aby działały z innym zabezpieczeniem lub ścieżką bazową niż moja główna aplikacja. Jak załadować te biblioteki DLL do oddzielnej AppDomain i utworzyć z nich instancje obiektów?
5 answers
A dokładniej
AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy
string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);
Jeśli wszystko pójdzie poprawnie (bez wyjątków) masz teraz instancję TypeIWantToLoad załadowaną do nowej domeny. Instancja, którą posiadasz, jest w rzeczywistości proxy (ponieważ rzeczywisty obiekt znajduje się w nowej domenie), ale możesz go używać tak jak normalnego obiektu.
Uwaga: Z tego co wiem TypeIWantToLoad musi dziedziczyć z MarshalByRefObject.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 14:29:27
Jeśli celujesz w 3.5, możesz skorzystać z nowego managed extensibility framework , aby obsłużyć wszystkie ciężkie operacje.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 23:50:12
Możesz użyć AppDomain.CreateInstance Metoda, aby to zrobić. Musisz wywołać metodę Unwrap zwracanego obiektu, aby uzyskać rzeczywisty obiekt.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 23:46:48
Utwórz nową Appdomain za pomocą AppDomain.Create( ... ). Po utworzeniu AppDomain załaduj biblioteki DLL do tej AppDomain.
Spójrz na wszystkie metody, które Appdomain ma z Create*. Są pewne rzeczy, takie jak CreateInstanceAndUnwrap itp.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-17 23:50:47
Jak wcześniej wspomniano, użyj AppDomain.CreateDomain, aby utworzyć nową domenę aplikacji. Następnie można załadować do niego zespół za pomocą metody Load, a nawet wykonać montaż za pomocą metody ExecuteAssembly. Możesz użyć GetAssemblies, aby sprawdzić, czy zespół został już załadowany. Należy również pamiętać, że nie można rozładować zespołu po załadowaniu. Musisz rozładować domenę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-18 00:27:05