【发布时间】:2009-12-09 08:56:38
【问题描述】:
我想通过将程序集保存到光盘或在运行时反映它来掌握程序集。程序集由第三方在内存中动态生成。
有人知道怎么做吗?
【问题讨论】:
标签: c# dynamic-assemblies
我想通过将程序集保存到光盘或在运行时反映它来掌握程序集。程序集由第三方在内存中动态生成。
有人知道怎么做吗?
【问题讨论】:
标签: c# dynamic-assemblies
试试这个(找到here):
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”命令将模块/程序集转储到文件中。
祝你好运:)
【讨论】: