2010-07-01 2 views
3

Я переношу приложение 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")); 
} 

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

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

+0

Байт-массив должен прибывать откуда-то. Вы можете открыть сетевое подключение или использовать методы общей памяти для получения байтов. –

ответ

1

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

static void Main(string[] args) 
     { 

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

      var g = Assembly.Load(h);    
     } 

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

+0

Я ошибся в вопросе, метод, который я использую, - AppDomain.Load. Я обновлю сообщение. – user379898

0

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

Смежные вопросы