Вот к примеру код:
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 для текущего домена, либо работать с загруженной сборкой исключительно внутри второго домена, передавая наружу только результаты ее работы.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот решил перейти с С++ на С# и наткнулся на такую проблемуКак я понял, в шарпе нет шаблонов как таковых, и это компенсируется интерфейсами...
Начал изучать MVVM и столкнулся, как наверное и многие другие, с определенным недопониманиемВ многочисленных примерах реализации MVVM, доступных...
Хочу добавить в проект несколько csv файлов и пользоваться ими, как текстовыми ресурсамиНу и чтобы лежали вместе в папке для порядка
ПриветствуюРешил поработать с selenium в C# посредством веб-драйвера phantomJS, но при запуске phantomjs