System.CodeDom.CodeCompileUnit을 사용하여 동적으로 일부 유형을 빌드하고이를 메모리의 IL 코드로 컴파일하고 해당 IL 코드를 메모리에로드 된 어셈블리에 삽입하려고합니다.이 중 하나를 디스크에 저장할 필요가 없습니다. 어쩌면 내 계획이 잘못되었을 수도 있습니다. 해당 대상으로 CodeCompileUnit 인스턴스를 가져 오는 방법에 대한 다른 제안을 엽니 다.어떻게 코드를 내보내고로드 된 어셈블리에 삽입합니까?
7
A
답변
7
ICorDebug
인터페이스를 사용하여 기존 (이미로드 된) 어셈블리에 코드를 삽입 할 수 있습니다. 편집하고 계속하십시오.
델타 바이트를 계산하고 ICorDebugModule2::ApplyChanges
으로 전화하십시오. 자세한 내용은 MDbg sample code을 참조하십시오.
이전에 우리는 ICorDebugModule::GetEditAndContinueSnapshot
과 친족을 사용 했었지만, 이제는 더 이상 사용되지 않습니다.
업데이트 이미로드 된 어셈블리에 코드를 삽입하는 것에 신경 쓰지 않는다면 Reflection.Emit
을 사용하여 새 어셈블리를 만드는 것이 더 효율적이고 훨씬 쉽습니다.
+0
이 솔루션은 직접 질문에 대답합니다. 감사. –
1
System.Reflection.Emit 네임 스페이스를 사용하여 동적 인 메모리 어셈블리를 만들 수도 있습니다.
다른 방법으로 CodeDom을 사용하여 & 컴파일 코드를 생성 한 다음 호출하십시오.
XMLSerialization()은 후자를 수행합니다.
1
Mono.Cecil을 사용하여 IL을 조작 할 수 있습니다. 어떻게 든 문서가 부족하지만 강력한 도구입니다.
관련 문제
- 1. Wordpress - 코드를 머리에 어떻게 삽입합니까?
- 2. 코드를 통해 WinForm에 콤보 상자를 어떻게 삽입합니까?
- 3. Django는 애드 센스 코드를 삽입합니까?
- 4. 어떻게 PPI로 의견을 찾은 다음 그 앞에 코드를 삽입합니까?
- 5. REF 테이블에 어떻게 삽입합니까?
- 6. 어떻게 gss에 CSS를 삽입합니까?
- 7. MSAcess 2010에 데이터를 어떻게 삽입합니까?
- 8. 커서가있는 위치에 텍스트를 어떻게 삽입합니까?
- 9. [net] 어셈블리에 디버깅 코드를 주입하는 방법은 무엇입니까?
- 10. WebBrowser 컨트롤의 문서에 JavaScript를 어떻게 삽입합니까?
- 11. 프로그래밍 방식으로 버튼을 만드는 코드를 어디에 삽입합니까?
- 12. PDO (sqllite3)에 어떻게 삽입합니까?
- 13. .epub를 웹 페이지에 어떻게 삽입합니까?
- 14. 어떻게 스택 패널을 격자에 삽입합니까?
- 15. 어떻게 레이크의 출력을 Textmate에 삽입합니까?
- 16. 업데이트하는 동안 데이터를 어떻게 삽입합니까?
- 17. Seam에 오늘 날짜를 어떻게 삽입합니까?
- 18. Python : 어떻게 분할하여 목록에 삽입합니까?
- 19. 어떻게 파일을 안드로이드에 데이터베이스에 삽입합니까?
- 20. table1에서 table2로 데이터를 어떻게 삽입합니까?
- 21. ASP.NET에서 앰퍼샌드가 포함 된 스크립트 URL을 어떻게 삽입합니까?
- 22. 어떻게 링크 된 목록의 시작 부분에 노드를 삽입합니까?
- 23. politico.com은 복사 된 텍스트에 하이퍼 링크를 어떻게 삽입합니까?
- 24. 다른 어셈블리에 정의 된 WPF 리소스를 어떻게 찾을 수 있습니까?
- 25. ILMerge 작업에 의해 생성 된 어셈블리에 어떻게 서명합니까?
- 26. .Net 어셈블리에 포함 된 리소스 인 exe를 어떻게 호출합니까?
- 27. 앱 서버가 비공개 필드에 어떻게 삽입합니까?
- 28. Coda에 코멘트 헤더를 어떻게 자동 삽입합니까?
- 29. Django : 기존 파일을 db에 어떻게 삽입합니까?
- 30. 초기화 시간에 어떻게 배열 항목을 삽입합니까?
왜 이미로드 된 어셈블리에 유형을 삽입해야합니까? 왜 현재 조립중인 어셈블리에 삽입 할 수 없습니까? – yfeldblum
@ Justice : 그것은 좋은 지적입니다. 무엇보다도 호기심입니다. 가능한 시나리오를 고안해야한다면 다음과 같은 것들이 있습니다 : 메모리에서 작업함으로써 어셈블리를 만드는 것에 대한 파일 시스템 권한을 회피하는 것; 또는 어셈블리에 코드를 삽입하고 동적으로 호출하여 앱을 다시 컴파일 할 필요없이 사물을 검사 할 수 있습니다. –
나는 이것을 할 수있는 방법이 있는지 확신하지 못합니다. 있다면, 알고 싶습니다. –