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