2009-12-09 4 views

ответ

0

Вы можете сделать это, используя SOS в WinDbg.

Проблема заключается в нахождении модулей.

Если у вас все в порядке, есть команда «SaveModule», чтобы сбрасывать модуль/сборку в файл.

Удачи :)

+1

Хорошо, говоря о попытке снова, вы не можете SaveModule только модуль «Run» :) –

+0

@JB: это изнутри WinDbg, я не знаю таких ограничений. – leppie

+0

Вот что я говорю. Вы можете увидеть модуль с! DumpDomain, но вы не можете! SaveModule it. –

2

Попробуйте это (найдено here):

byte[] dllAsArray; 

using (MemoryStream stream = new MemoryStream()) 
{ 
    BinaryFormatter formatter = new BinaryFormatter(); 

    formatter.Serialize(stream, results.CompiledAssembly); 

    dllAsArray = stream.ToArray(); 
} 
+0

Это правда. Вы также можете отправлять их через Интернет (например, через WCF), отбрасывать его обратно на сборку на другом конце и загружать. Убей мой разум. – gjvdkamp

+0

Yup, это тоже работает :) – Roboblob

+0

Вместо этого вы можете использовать File.ReadAllBytes в файле, который хранится во временной папке во время компиляции. –

1

Это было время, так как я сделал это, я предполагаю, что программа, которая передает вам DLL, использует CompilerParameters.GenerateInMemory = Правда.

Дело в том, что dll действительно сохраняется на диске в некоторой временной папке на короткое время (пока он работает или что-то еще ...), потому что именно так работает компилятор C# (работает?).

Я помню, что это было проблемой для меня тогда, но у меня возникли проблемы с возвратом деталей сейчас, дайте понять. Вы можете обнаружить это с помощью ProcessExplorer или аналогичных инструментов, чтобы увидеть, какие файлы были сохранены/затронуты.

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