这是一个示例代码:
var setup = new AppDomainSetup();
setup.PrivateBinPath = $"{Directory.GetCurrentDirectory()}\\Libs";
var appDomain = AppDomain.CreateDomain( "имя домена", null, setup );
appDomain.DoCallBack ( AssemblyLoad );
回调中的方法示例:
private static void AssemblyLoad()
{
var assembly = Assembly.Load( "Test" );
var type = assembly.GetTypes().Single( t => typeof( НужныйТип).IsAssignableFrom( t ) );
Console.WriteLine( type.FullName );
_typeName = type.FullName;
}
该变量_typeName也是静态的并且保持为空。如果您使该方法成为非静态的,那么域回调将导致错误。如何找出所需类型的名称?
创建一个额外的类,继承自
MarshalByRefObject并将 , 移动到其中AssemblyLoad,_typeName使它们成为非静态的。由于未知原因,
DoCallBack它不起作用(很可能是将程序集拖到当前域),但它起作用了CreateInstanceAndUnwrap:这将导致以下问题:如果您尝试
test._typeName在当前域中访问,这将导致测试程序集被加载到其中。由于未设置当前域的私有路径,因此会抛出异常FileNotFoundException。您还必须为当前域设置私有路径,或者只在第二个域内使用加载的程序集,仅将其工作结果传输到外部。