我的情况是我有一个创建AppDomains的.net应用程序(例如控制台应用程序).然后,它需要在该AppDomain中的Types上创建实例和调用方法.每个AppDomain都有一个应依赖的特定目录,该目录不在Console Apps目录下(甚至不包含在该目录下).这是我的简单代码:
string baseDirectory = "c:\foo"; // <- where AppDomain's dependecies
// set up the app domain
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationName = DateTime.Now.ToString("hh:MM:ss:ffff");
setup.ApplicationBase = baseDirectory;
setup.PrivateBinPath = baseDirectory;
// create app domain
AppDomain domain = AppDomain.CreateDomain(
name,
AppDomain.CurrentDomain.Evidence,
setup );
// instantiate Type from an assembly in that AppDomain
ObjectHandle handle = domain.CreateInstanceFrom(
"SampleClassLibrary.dll", // <- exists in "c:\foo"
"SomeClassInTheDll" );
对CreateInstanceFrom的调用导致FileNotFoundExcepotion. FusionLog显示搜索到的目录为控制台应用目录.它不包括在“ baseDirecory”变量中通过AppDomain设置的搜索文件夹.
我究竟做错了什么?还有另一种执行驻留在另一个AppDomain中的代码的方法吗?
谢谢…
解决方法:
一种解决方法是将完整路径传递给.CreateInstanceFrom调用:
ObjectHandle handle = domain.CreateInstanceFrom(
baseDirectory + @"\SampleClassLibrary.dll", // <- exists in "c:\foo"
"SomeClassInTheDll" );