2013-07-26 5 views
2

J'essaye d'invoquer une classe pour s'exécuter sous un AppDomain distinct mais je reçois une exception à propos de la possibilité de charger la classe ou l'une de ses dépendances. Voici un exemple de ce que je fais.Comment créer une nouvelle instance de classe sous un 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); 

Dans mon TestProject séparé J'ai un TestClass de classe nommée:

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

J'ai vérifié tous les chemins pour tout et ils sont corrects. J'obtiens l'erreur:

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) 

J'ai essayé de changer de chemin en le déplaçant vers l'assemblage en cours d'exécution. Toujours rien. La DLL se trouve dans K: \ Installer \ Bin \ TestProject.dll. Je cours cela sous admin donc il a des permissions à la Dll.

+0

Avez-vous essayé d'attraper l'exception 'ReflectionTypeLoadException'? Peut-être que "TestProject.dll" a des dépendances que le moteur d'exécution n'a pas pu résoudre. – McGarnagle

+0

La seule chose dans les inclus sont les DLL système. Comment ceux-ci ne seraient-ils pas résolus? – busbina

Répondre

1

Compris. Changé mon code à ceci:

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); 
Questions connexes