2013-07-26 4 views
2

Я пытаюсь вызвать класс для запуска под отдельным AppDomain, но я получаю исключение из-за того, что я могу загрузить класс или одну из его зависимостей. Вот пример того, что я делаю.Как создать новый экземпляр класса под AppDomain

AppDomain ad = AppDomain.CreateDomain("New domain"); 
IIdentity identity = new GenericIdentity("NewUser"); 
IPrincipal principal = new GenericPrincipal(identity, null); 
ad.SetThreadPrincipal(principal); 
TestClass remoteWorker = (TestClass)ad.CreateInstanceAndUnwrap(
         binFolder+"\\TestProject.dll", 
         "TestClass"); 
remoteWorker.Run(data1,data2); 

В моем отдельном TestProject у меня есть один класс с именем TestClass:

public class TestClass : MarshalByRefObject 
{ 
     public void Run(string name, string path) 
     { 
      //Some stuff 
     } 
    } 

Я проверил все пути, за все, и они являются правильными. Я получаю сообщение об ошибке:

Could not load file or assembly 'K:\\Installer\\Bin\\TestProject.dll' 
or one of its dependencies. The given assembly name or codebase was invalid. 
(Exception from HRESULT: 0x80131047) 

Я попытался изменить пути, переместив их на выполняющуюся в данный момент сборку. Еще ничего. DLL находится в папке K: \ Installer \ Bin \ TestProject.dll. Я запускаю это под admin, поэтому у него есть разрешения для Dll.

+0

Вы пытались поймать исключение 'ReflectionTypeLoadException'? Возможно, «TestProject.dll» имеет некоторые зависимости, которые среда выполнения не могла решить. – McGarnagle

+0

Единственное, что входит в комплект, это системные DLL. Как бы они не решались? – busbina

ответ

1

Выяснил это. Изменен код:

AppDomainSetup domainSetup = new AppDomainSetup 
          {PrivateBinPath = binFolder+"\\TestProject.dll"}; 
AppDomain ad = AppDomain.CreateDomain("New domain",null, domainSetup); 

TestClass remoteWorker = (TestClass)ad.CreateInstanceFromAndUnwrap(
          binFolder+"\\TestProject.dll", 
          typeof(TestClass).FullName); 
Смежные вопросы