Загрузить сборку из памяти - PullRequest
3 голосов
/ 01 июля 2010

Я портирую приложение Java, где классы загружаются и «выполняются» во время выполнения из памяти (байтовый массив).Я пытаюсь добиться того же в C #, но у меня возникают проблемы (System.IO.FileNotFoundException исключения) при попытке загрузить сборки из байтовых массивов (используя метод AppDomain.Load).

static void Main(string[] args)
{
    var domain = AppDomain.CreateDomain("foo");

    domain.AssemblyResolve += new ResolveEventHandler(domain_AssemblyResolve);

    var assembly = domain.Load("MyAssembly");
}
static Assembly  domain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    // ...
    return Assembly.ReflectionOnlyLoad(File.ReadAllBytes(@"C:\MyAssembly.exe"));
}

Есть ли способ загрузить их без необходимости сохранения этого байтового массива в файловой системе?

Упрощая идею, мы хотим получитьВозможность динамического выполнения и изменения (обновления) кода.Мы используем отдельные домены приложений для «загрузки / выгрузки» сборок.

Ответы [ 2 ]

1 голос
/ 01 июля 2010

Я только что попробовал этот код:

static void Main(string[] args)
        {

            var h = File.ReadAllBytes(@"C:\MyAssembly.exe");

            var g = Assembly.Load(h);            
        }

и он работал нормально - я не получил никаких исключенийВы на 100% уверены, что целевая сборка существует?

0 голосов
/ 01 июля 2010

Есть ли у него зависимости? Если это так, вы должны загрузить их в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...