Вот к примеру код:
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:
class Test : MarshalByRefObject
{
private Type _typeName;
public void AssemblyLoad()
{
var assembly = Assembly.Load( "Test" );
var type = assembly.GetTypes().Single( t => typeof( НужныйТип).IsAssignableFrom( t ) );
Console.WriteLine( type.FullName );
_typeName = type.FullName;
}
}
// ...
var setup = new AppDomainSetup {
PrivateBinPath = "Libs"
};
var appDomain = AppDomain.CreateDomain("имя домена", null, setup);
var test = (Test)appDomain.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName, typeof(Test).FullName);
test.AssemblyLoad();
При этом возникнет следующая проблема: если вы попытаетесь обратиться к test._typeName в текущем домене, это повлечет загрузку в него сборки Test. Так как private path для текущего домена не прописан, возникнет исключение FileNotFoundException. Вам придется либо также настраивать private path для текущего домена, либо работать с загруженной сборкой исключительно внутри второго домена, передавая наружу только результаты ее работы.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости