От новичка до гуру: Курсы программирования на CyberDuff

Как загрузить приложение с dll из памяти в AppDomain и выполнить его?

У меня есть несколько потоков со сборкой и ее используемыми dll. Как я могу загрузить их в AppDomain и выполнить основную сборку? Я бы предпочел не сохранять файлы на диск, если этого можно избежать.

06.08.2010

Ответы:


1

Вы можете использовать получение сборки с помощью следующего механизма.

Assembly myAssembly = Assembly.Load(<your raw file stream>);

Вы можете зарегистрироваться для следующего события и обрабатывать его для обслуживания запрошенных типов, поступающих из ваших пользовательских сборок:

AppDomain.CurrentDomain.TypeResolve += new ResolveEventHandler(CurrentDomain_TypeResolve);

static Assembly CurrentDomain_TypeResolve(object sender, ResolveEventArgs args)
    {
        Type  resolvedType =  myAssembly.GetType( args.Name, false);
    }

К сожалению, любой тип, загруженный в вашу программу, окажется здесь, поэтому вы можете захотеть создать какой-то механизм кэширования для хранения информации о типе.

06.08.2010
  • Я только что попробовал, но он не вызывает обработчик. Вместо этого он падает, когда я вызываю основной метод загруженной и созданной основной сборки. (TargetInvocationException: IOException: не удается найти ресурс mainwindow.xaml.) Приложение работает нормально, когда я загружаю его напрямую. 06.08.2010
  • Это не сработает, если ваша сборка имеет встроенные ресурсы, поскольку в приведенном выше коде выполняется только разрешение типов. Если вы можете переместить эти ресурсы, все должно работать нормально. Или вы можете использовать Assembly.GetManifestResourceInfo для извлечения ресурсов из этой сборки отдельно. 06.08.2010
  • Я добавил разрешение ресурсов в свой код, но обработчик вызывается только для ресурсов в сборке загрузчика. Кроме того, файл xaml в исключении отсутствует в ресурсах сборки. (Я использую GetManifestResourceNames() для вывода списка ресурсов.) 07.08.2010
  • Новые материалы

    Прогрессивная транспиляция
    В последние годы программисты JavaScript (он же EcmaScript) часто используют компиляторы исходного кода , также известные как транспиляторы , для преобразования более усовершенствованной или..

    Алиса в стране машинного обучения — инициатива «100 дней кода машинного обучения»
    Covnets, регрессия, классификация, ReLU, предвзятость… — все это интригующие жаргоны, которые я слышал от своих сверстников, выбравших курс машинного обучения, по касательной во время обычного..

    Иногда учитель, всегда ученик
    Учение Йоды в применении к развитию разработчиков «Делай или не делай. Нет никакой попытки.” Обучение программированию превратилось в современное «создание группы» или «написание книги»...

    Как создать файл конфигурации сборки в Xcode | Серия настроек проекта Xcode
    Эта статья шаг за шагом расскажет вам, как создать новый файл конфигурации сборки в вашем проекте Xcode. Что такое файл конфигурации сборки? Файл конфигурации сборки — это обычный..

    Venv против Virtualenv в Python  — что использовать?
    Когда дело доходит до создания виртуальных сред в Python, есть два популярных варианта: venv и virtualenv. Оба инструмента служат одной цели — созданию изолированных сред для ваших проектов..

    Реализация персептрона на Python (для абсолютных новичков)
    Введение За последние пару десятилетий было довольно много шумихи вокруг искусственного интеллекта и его приложений. В этой статье мы обсудим, что такое искусственный интеллект и его основное..

    С помощью javascript мы можем сделать это в одну строку.
    С помощью javascript мы можем сделать это в одну строку. let x = 5; let y = 7; y = [x, x = y][0]; Но то, что мы можем , не обязательно означает, что мы должны это делать.