我正在尝试调用一个类以在单独的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的权限。

最佳答案

弄清楚了。将我的代码更改为此:

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

关于c# - 如何在AppDomain下创建类的新实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17888435/

10-08 22:40