在另一个 AppDomain 中创建类型的实例

2024-05-15

我的场景是,我有一个创建 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(使用前将#替换为@)

在另一个 AppDomain 中创建类型的实例 的相关文章

随机推荐