我想到负荷的一个或多个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看到的,如果一个会已经被加载。要知道,你不能卸组件,一旦它的装载。你会需要的卸载域。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top