generieren Ich habe eine DLL namens ExpensiveAndLargeObfuscatedFoo.dll. Lets sagt, es definiert einen Typ namens ExpensiveAndLargeObfuscatedFooSubClass. Es wurde für .NET kompiliert..net dll Wrapper um vorhandene .net-Bibliothek
Gibt es irgendwelche Werkzeuge (kostenlos, bezahlt, was auch immer), die C# oder vb class Dateien erzeugen, die nichts anderes tun werden als alles in dieser teuren dll definiert? Auf diese Weise kann ich Funktionalität hinzufügen, Bugs beheben (die CorpFUBAR nicht reparieren kann), Logging hinzufügen, etc?
Wörtlich ich ausgeben wollen, die wie dieses
namespace easytoread {
public class SubClass {
private ExpensiveAndLargeObfuscatedFoo.SubClass _originalSubClass;
public SubClass() {
this._originalSubClass = new ExpensiveAndLargeObfuscatedFoo.SubClass();
}
public string StupidBuggyMethod(string param1,int param2) {
return _originalSubClass.StupidBuggyMethod(param1, param2);
}
}
}
sieht es würde behandeln individuelle Rückgabetypen sowie Primitiven
namespace easytoread {
public class SubFooClass {
private ExpensiveAndLargeObfuscatedFoo.SubFooClass _originalSubFooClass;
public SubFooClass() {
this._originalSubFooClass= new ExpensiveAndLargeObfuscatedFoo.SubFooClass();
}
private SubFooClass(ExpensiveAndLargeObfuscatedFoo.SubFooClass orig) {
this._originalSubFooClass = orig;
}
public SubFooClass StupidBuggyMethod(string param1,int param2) {
return new SubFooClass(_originalSubFooClass.StupidBuggyMethod(param1, param2));
}
}
}
Und so weiter und so weiter für jede einzelne definierte Klasse .
Grundsätzlich armer mans dynamischer Proxy? (yay, Castle Project ist genial!)
Wir möchten auch einige unserer Wrapper-Klassen umbenennen, aber das Tool muss das nicht tun.
Ohne Umbenennung, würden wir in der Lage sein, die alte Baugruppe mit unserem neuen erzeugten zu ersetzen, ändern-Anweisungen und weiter als wäre nichts passiert (mit Ausnahme der Fehler behoben wurden!)
Es muss nur das prüfen dll und do code generation. Der generierte Code kann sogar VB.NET, Ironpython oder irgendwas CLR sein.
Dies ist ein rutschiger Hang und ich bin nicht glücklich, dass ich hier gelandet bin, aber das scheint der Weg zu sein. Ich habe das Castle Project angeschaut, aber wenn ich mich nicht täusche, wird das aus zwei Gründen nicht funktionieren: 1) Ich kann nichts umbenennen (nicht fragen), 2) keine der Assemblierungsmethoden werden als virtuell deklariert oder sogar überschrieben . Selbst wenn sie es wären, müsste ich Hunderte von Typen manuell überschreiben, was nicht lustig klingt.
Ich bezweifle, dass ein Werkzeug bereits existiert, aber Sie könnten das mit Reflektion, Ordner mirroring Namespaces etc .. tun. – Guillaume86
Ich weiß nicht, ob es hilft, aber Sie sollten vielleicht in [Typweiterleitung in der CLR] schauen (http://msdn.microsoft.com/en-us/library/ms404275.aspx). –