Ändern Bestehender .NET-Assemblys

Gibt es eine Möglichkeit, vorhandene ändern .NET-assemblies, ohne auf 3rd-party-tools? Ich weiß, dass PostSharp macht dies möglich, aber ich finde es unglaublich verschwenderisch, dass die developler von PostSharp im Grunde hatte zu schreiben, die die Funktionalität des ganzen System.Reflection - namespace, um bestehende Baugruppen modifizierbar.

System.Reflection.Emit erlaubt nur die Erstellung von neuen, dynamischen Assemblys. Allerdings, alle die builder-Klassen, die hier Erben von der grundlegenden Reflexion Klassen (z.B. TypeBuilder erbt von System.Type). Leider, es scheint nicht zu sein, einen Weg zu zwingen, eine bestehende, dynamisch geladen wird, geben Sie in eine Art generator. Zumindest gibt es keine offizielle, unterstützt.

So was von nicht unterstützten? Weiß jemand von backdoors, die es ermöglichen, laden Sie vorhandene Baugruppen oder Arten, die in solchen builder-Klassen?

Geist, ich bin nicht der Suche nach Möglichkeiten zum ändern der aktuellen Baugruppe (diese kann sogar eine unzumutbare Anforderung), aber nur um das ändern vorhandener Baugruppen geladen von der Disk. Ich fürchte, es gibt keine solche Sache, aber ich möchte Sie trotzdem bitten.

Im schlimmsten Fall würde, zu greifen, zu ildasm.exe demontieren Sie den code und dann ilasm.exe für den Zusammenbau, aber es gibt keine toolchain (lies: IL-reader) enthalten in .NET für die Arbeit mit IL-Daten (oder doch?).

/EDIT:

Ich hab keinen bestimmten Fall. Ich bin nur daran interessiert, eine Allgemeine Lösung, weil patchen von vorhandenen Baugruppen ist eine Recht häufige Aufgabe. Nehmen obfuscators zum Beispiel, oder der Profiler, oder AOP-Bibliotheken (ja, das letztere kann werden anders implementiert). Wie ich schon sagte, es scheint unglaublich verschwenderisch gezwungen werden, zu umschreiben, große Teile der bereits vorhandenen Infrastruktur in System.Reflection.


@Wedge:

Du hast Recht. Es gibt jedoch keine spezifischen Anwendungsfall hier. Ich habe geändert, die ursprüngliche Frage, um diese zu reflektieren. Mein Interesse wurde geweckt durch eine andere Frage, wo der Fragesteller wollte wissen, wie er könnte, Spritzen Sie den Anweisungen pop und ret am Ende jeder Methode, um zu halten von Lutz Roeder ' s Reflector von reengineering the (VB oder C#) - Quellcode.

Nun, dieses Szenario kann umgesetzt werden mit einer Reihe von tools, z.B. PostSharp erwähnt und die Reflexil plugin für den Reflektor, der wiederum verwendet die Cecil Bibliothek.

Alles in allem, ich bin einfach nicht zufrieden mit der .NET framework.

@Joel:

Ja, ich bin mir bewusst, dass dieser Beschränkung. Trotzdem danke für den Hinweis es aus, da es wichtig ist.

@marxidad:

Dies scheint der einzige praktikable Ansatz. Dies würde jedoch bedeuten, dass Sie würden immer noch neu die komplette Baugruppe mit den builder-Klassen, richtig? I. e. würden Sie haben zu gehen über die ganze Versammlung manuell.

Hmm, ich werde in diesem Blick.

Schreibe einen Kommentar