Можно ли получить содержимое загруженной сборки .net в виде байтового массива или потока? - PullRequest
1 голос
/ 28 января 2010

Можно ли получить содержимое загруженной сборки .net в виде байтового массива или потока?

Я пытаюсь сделать что-то похожее (конечно, реальный сценарий намного сложнее, поэтому просто хранить буфер не вариант).

byte[] bytes = GetTheBytes();
Assembly asm = Assembly.Load(bytes);
byte[] bytes2 = GetAssemblyAsByteArray(asm);
Assert.IsTrue(bytes.SequenceEqual(bytes2));

Мне нужно знать, как реализовать функцию GetAssemblyAsByteArray.

Edit: Решение с File.ReadAllBytes () недостаточно, потому что сборка может быть динамической, и нет, у меня нет (простого) доступа к источнику (он генерируется автоматически, и я предпочел бы не отслеживать его) , Комментарий с сериализацией может сработать, но я не знаю точно, как его использовать. Моя конечная цель - передать сборки в качестве параметров / reference в csc.exe, и единственный способ, который я придумал, работает одинаково, независимо от того, являются ли сборки динамическими или нет, это сохранить все необходимые сборки во временные файлы.

1 Ответ

1 голос
/ 28 января 2010

Вы можете использовать:

byte[] bytes = File.ReadAllBytes(assembly.Location);

на уже загруженной сборке, и вы получите byte[], который подходит для передачи на Assembly.Load(byte[]).

Однако , если сборка была первоначально загружена с использованием метода Load(byte[]), ее свойство Location будет пустой строкой, что означает, что этот метод не будет работать.

Не похоже, что есть способ сделать то, что вы хотите для всех сборок. Очевидный обходной путь для сохранения оригинального byte[] при первом получении.

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