题
我想到负荷的一个或多个Dll动态,使它们运行一个不同的安全或basepath于我的主要应用程序。我怎么把这些Dll入一个单独的程序域和实例对象,他们吗?
解决方案
更具体地说
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);
如果一切适当(没有例外扔)你现在有一个实例TypeIWantToLoad加载到你的新领域。实例有实际上是代理(因为实际的对象是在新的领域),但你可以用它就像你正常的对象。
注:据我所知TypeIWantToLoad有继承MarshalByRefObject。
其他提示
如果你的目标3.5,可以利用新的 管理扩展框架 来处理所有的繁重你。
你可以使用 程序域.CreateInstance 方法来做到这一点。你只需要解开方法的ObjectHandle,返回得到的实际对象。
创建一个新的程序域与程序域.创建(...).在创建之后的程序域载Dll入这域.
看到所有的法域具有创造*.有一些事情像CreateInstanceAndUnwrap,等等。
如前所述,使用程序域.CreateDomain创建一个新应用领域。然后你可以负载一个组成,它使用的装载方法,或甚至执行的一个大会使用的ExecuteAssembly方法。你可以使用GetAssemblies看到的,如果一个会已经被加载。要知道,你不能卸组件,一旦它的装载。你会需要的卸载域。
不隶属于 StackOverflow