我的场景是,我有一个创建 AppDomain 的 .net 应用程序(假设是控制台应用程序)。然后,它需要创建实例并调用该 AppDomain 中类型的方法。每个AppDomain都有一个特定的目录,它的依赖项应该在其中,该目录不在控制台应用程序目录下(甚至不在控制台应用程序目录附近)。这是我的简单代码:
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 的调用会导致 FileNotFoundException。 FusionLog显示它搜索的目录是控制台应用程序目录。它不包括从 AppDomain 设置的搜索文件夹 - 在“baseDirecory”变量中。
我究竟做错了什么?是否有另一种方法可以执行位于另一个 AppDomain 中的代码?
谢谢...
一种解决方法是将完整路径传递给 .CreateInstanceFrom 调用:
ObjectHandle handle = domain.CreateInstanceFrom(
baseDirectory + @"\SampleClassLibrary.dll", // <- exists in "c:\foo"
"SomeClassInTheDll" );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)