Ich habe einige Typen dynamisch mit System.CodeDom.CodeCompileUnit erstellt, möchte diese in IL-Code im Arbeitsspeicher kompilieren und diesen IL-Code in eine Assembly im Arbeitsspeicher einfügen - es ist nicht nötig, diese auf der Festplatte zu speichern. Vielleicht ist mein erklärter Plan falsch. Öffnen Sie weitere Vorschläge zum Abrufen der CodeCompileUnit-Instanz an das angegebene Ziel.Wie kann ich Code ausgeben und in eine geladene Baugruppe injizieren?
Antwort
Sie können Code in ein vorhandenes (bereits geladen) injizieren Montage ICorDebug
Schnittstellen. Bearbeiten und Weiter macht es.
Berechnen Sie Ihre Delta-Bytes und ICorDebugModule2::ApplyChanges
nennen. Weitere Informationen finden Sie unter MDbg sample code.
einmal haben wir ICorDebugModule::GetEditAndContinueSnapshot
und Verwandten, aber diese sind jetzt veraltet.
aktualisieren Wenn Sie sich über die Injektion Code in eine bereits geladene Assembly sich nicht, nur Reflection.Emit
mit einer neuen Baugruppe zu schaffen, ist effizienter und viel einfacher.
Diese Lösung beantwortet direkt die Frage. Vielen Dank. –
Sie können auch System.Reflection.Emit Namespace verwenden und erstellen Sie eine dynamische, in-Memory-Anordnung.
Alternative ist CodeDom zu verwenden & Kompilierung-Code zu generieren, dann in das nennen.
XMLSerialization() tut Letzteres.
können Sie Mono.Cecil verwenden IL zu manipulieren. Es ist ein mächtiges Werkzeug, obwohl es irgendwie Dokumentation fehlt.
- 1. Dynamisch geladene Baugruppe mit Formular?
- 2. [net] Wie Debugging-Code in eine Assembly injizieren?
- 3. Wie kann ich dynamisch geladene DataGridViews Datenbaninden?
- 4. Wie kann ich eine Länge eines Arrays in Javascript ausgeben?
- 5. Wie kann ich Location in angular2 injizieren?
- 6. Wie kann ich einfache Schallwellen in C# synthetisieren und ausgeben?
- 7. Schreibeinheit-Tests in eine Baugruppe oder in eine separate Baugruppe?
- 8. Wie kann ich eine Microsoft Fakes-Baugruppe problemlos ersetzen?
- 9. Wie kann ich eine benutzerdefinierte Eigenschaft für meine Baugruppe erstellen?
- 10. Wie kann ich eine Variable und eine Formel in Excel mit VBA ausgeben?
- 11. Wie kann ich eine 64-Bit-Ganzzahl als Hex ausgeben?
- 12. Sparktables: Wie kann ich Additionstabellenelemente ausgeben?
- 13. Wie kann ich eine Build-Nummer mit Webpack injizieren?
- 14. Wie kann ich einfach einen Dollarbetrag ausgeben?
- 15. Wie kann ich Echos und Apostrophe aus einer Datenbank ausgeben?
- 16. Wie kann printf eine Compilerwarnung ausgeben?
- 17. Code in nativen Prozess injizieren
- 18. Wie kann ich Java Bytecode zur Laufzeit ausgeben und ausführen?
- 19. Wie kann ich die Daten individuell ausgeben?
- 20. Wie kann ich Redis Lua-Skripte ausgeben?
- 21. Wie kann ich eine Instanz von List im Frühjahr injizieren?
- 22. Code dynamisch erstellen und auf Android ausgeben
- 23. Wie entlade ich eine bereits geladene Klasse in Java?
- 24. Wie kann ich eine Angular2-Unterkomponente dynamisch über den Typoskript-Code injizieren?
- 25. Wie kann ich eine Ganzzahl ausgeben und float abhängig von der Eingabe in Python?
- 26. Kann ich benutzerdefinierte Ansichtskomponenten in eine Vue.js-Grid-Komponente injizieren?
- 27. Wie kann ich eine Reihe von Dateien und Verzeichnissen mit Classic ASP in JSON ausgeben?
- 28. Ich verstehe nicht, diese Baugruppe Inline-Code in C erweitern
- 29. Positionsabhängiger, unabhängiger Code und globale Variablen in PowerPC-Baugruppe
- 30. So fügen Sie eine Baugruppe in einer anderen Baugruppe hinzu?
Warum müssen Sie die Typen in eine bereits geladene Baugruppe injizieren? Warum können Sie sie nicht in eine Baugruppe injizieren, die Sie gerade bauen? – yfeldblum
@Justice: Das ist ein guter Punkt - es ist eine Neugier mehr als alles andere. Ich nehme an, wenn ich Szenarien erfinden musste, sind: die Dateisystemberechtigungen über das Bauen von Baugruppen zu umgehen, indem einfach im Speicher gearbeitet wird; Oder vielleicht, um Code in eine Assembly einzufügen und ihn dynamisch aufzurufen, um Dinge zu überprüfen, ohne die App neu kompilieren zu müssen. –
Ich bin mir nicht sicher, ob es einen Weg gibt, dies zu tun. Wenn ja, würde ich es gerne wissen. –