어셈블리를 디스크에 저장하거나 런타임에 반영하여 어셈블리에 손을 넣고 싶습니다. 어셈블리는 제 3 자에 의해 메모리에서 동적으로 생성됩니다.메모리에 저장된 동적으로 생성 된 어셈블리를 저장하는 방법은 무엇입니까?
누구든지이 작업을 수행하는 방법을 알고 있습니까?
어셈블리를 디스크에 저장하거나 런타임에 반영하여 어셈블리에 손을 넣고 싶습니다. 어셈블리는 제 3 자에 의해 메모리에서 동적으로 생성됩니다.메모리에 저장된 동적으로 생성 된 어셈블리를 저장하는 방법은 무엇입니까?
누구든지이 작업을 수행하는 방법을 알고 있습니까?
WinDbg의 SOS를 사용하여이 작업을 수행 할 수 있습니다.
문제는 모듈을 찾는 것입니다.
손에 익숙해지면 모듈/어셈블리를 파일로 덤프하는 'SaveModule'명령이 있습니다.
행운을 빕니다 :)
보십시오이 (발견 here) : 내가 이런 짓을하기 때문에, 나는 당신을 손 프로그램이 DLL이 CompilerParameters.GenerateInMemory를 사용하는 추측하고있어 잠시
byte[] dllAsArray;
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, results.CompiledAssembly);
dllAsArray = stream.ToArray();
}
그것은이었다 = 참된.
그러나 실제로는 C# 컴파일러가 작동하는 방식 (작동 했습니까?) 때문에 dll은 잠시 동안 임시 폴더에서 디스크에 저장됩니다 (실행되는 동안이나 ...).
저는이 문제가 저에게있어서 당황 스럽다는 것을 기억하지만, 지금은 세부 사항을 되 찾는 데 어려움을 겪고 있습니다. ProExplorer 또는 이와 유사한 도구를 사용하여 저장/수정 된 파일을 확인할 수 있습니다.
음, 다시 시도해 보자. SaveModule을«실행»전용 모듈이라고 할 수는 없다. –
@JB : 이것은 WinDbg에서 온 것으로, 이러한 제한을 알지 못한다. – leppie
그게 무슨 말인지. ! DumpDomain을 사용하여 모듈을 볼 수는 있지만 저장할 수는 없습니다! SaveModule it! –