我想通过将程序集保存到光盘或在运行时反映它来掌握程序集。程序集由第三方在内存中动态生成。
有谁知道如何做到这一点?
试试这个(在这里找到):
byte[] dllAsArray;
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, results.CompiledAssembly);
dllAsArray = stream.ToArray();
}
自从我这样做以来已经有一段时间了,我猜向您提供 DLL 的程序使用CompilerParameters.GenerateInMemory =True。
然而,问题是 dll 确实会在某个临时文件夹中的磁盘上保存一小段时间(当它运行或其他东西时......),因为这就是 C# 编译器的工作方式(工作?)。
我记得当时这对我来说是个问题,但我现在无法找回细节,请稍等。您可以使用 ProcessExplorer 或类似工具可能会发现这一点,以查看哪些文件被保存/触摸。
您可以在 WinDbg 中使用 SOS 执行此操作。
问题是找到模块。
如果您确实掌握了它,那么有一个“SaveModule”命令可以将模块/程序集转储到文件中。
祝你好运 :)