Domanda

Qual è la migliore in termini di capacità, facilità d'uso, documentazione, esempi, comunità di supporto / assistenza tecnica, l'integrazione VS, implementazioni note, redditività a lungo termine, e costruire la velocità per implementare un framework AOP personalizzato?

inizierò con quello che so (ho provato solo PostSharp a finora):

  • Microsoft Compiler Common Instrastruture (CCI) : Ho letto che è utilizzato per FxCop, ILMerge, Spec # e Code Contracts. Sembra essere molto basso livello in quanto non ha nemmeno prendersi cura di compensazioni correzione per i codici ramo che sono borken quando IL viene modificata con esso .
  • PostSharp è di 5 anni, ha molte capacità per AOP (ad esempio estratti alcune cose che avrebbe bisogno di avere a fare manualmente con IL distanza), fonte codice disponibile, sviluppata / supportato da solo un ragazzo, ma lui sta progettando di rendendo questo un business, ha documentazione, ma potrebbe essere migliore, costruisce prendere circa il doppio del tempo, molto piccoli campioni su come iniettare IL e la versione 2.0 sarà rilasciata presto che promette di essere molto migliorata.
  • Mono Cecil : Scritto da un ragazzo, parte della suite Mono e v'è una plug-in per riflettore chiamato Reflexil che utilizza Mono Cecil.
È stato utile?

Soluzione

Sia Microsoft.CCI e Mono.Cecil sono di basso livello, e non convalidano assiemi prodotti. Ci vuole un sacco di tempo per trovare il motivo del problema, se c'è qualche errore nel codice generato o struttura di montaggio.
Mi consiglia di utilizzare PostSharp se le sue caratteristiche sono abbastanza per voi compiti.
In caso contrario ... Mono.Cecil ha una migliore, più comprensibile e semplice nel modello di uso oggetti. Tuttavia, ho avuto un brutto bug quando usato nel mio programma (riferimento al metodo sbagliato è stato salvato nel montaggio; penso che ci fosse qualche bug con i metadati gettoni movimentazione)
Microsoft.CCI ha una, modello a oggetti brutto assolutamente over-progettato nello stesso tempo privo di molte funzionalità semplici; tuttavia, è più matura di Mono.Cecil. Infine, ho abbandonato Mono.Cecil e utilizzato Microsoft.CCI per il mio programma.

Altri suggerimenti

Come con la maggior parte dei quadri che sono già là fuori, vorrei suggerire a voi, per quanto riguarda l'implementazione del proprio framework AOP: Non pratico . Ci sono diversi già là fuori, tra (presto-to-be) supportato commercialmente PostSharp, e CThru , un framework AOP alimentato da Typemock .

Ma in ogni caso, ho trovato Mono.Cecil molto facile da usare. Si astrae la necessità di affrontare con Reflection.Emit bene, e ha il sostegno della comunità Mono.

vi consiglio di dare un'occhiata al Linfu - è un insieme open-source di biblioteche, uno di loro è un framework AOP implementato in cima Mono.Cecil. C'è un bel articolo su Linfu AOP su CodeProject.

Per quanto ne so, Linfu è costruita su Mono.Cecil.

Direi che PostSharp.Core ha più funzioni di alto livello rispetto alle altre strutture, quindi è più facile da utilizzare per le opere più grandi. È possibile lavorare a livello basso anche, ma non a livello binario (in base alla progettazione). Si potrebbe fare un assieme fusione / shrinker utilizzando PostSharp, ma il fatto che esso compila eseguiti con ILASM avrebbe fissato alcune limitazioni (ad esempio che anche i membri interni devono essere denominati). D'altra parte, avendo ILASM come backend rende molto più facile per sviluppare sulla parte superiore della PostSharp, dal momento che ILASM verificare molte regole e si può facilmente leggere il codice MSIL prodotto. PostSharp ha anche permesso di mettere i commenti in MSIL per aiutare il debug di generazione del codice.

Un altro punto: se si vuole fare un aspetto personalizzato (per esempio, si sviluppa un motore di database e si desidera fornire un aspetto persistenza), è necessario molto di più di un semplice masterizzatore MSIL. Avete bisogno di un'infrastruttura AO che farà gran parte del lavoro per voi. Quando si sviluppa un aspetto personalizzato, direi 1% del lavoro è specifico per il vostro aspetto personalizzato, il 39% è l'infrastruttura aspetto, e il 60% è la roba masterizzatore MSIL. Sono spesso in grado di programmare un aspetto molto specifico in un paio d'ore sulla base di PostSharp.

Quindi, tornando alla tua domanda, e, naturalmente, con i miei biais, direi: se si vuole scrivere un obfuscator, fusioni / shrinker e così via, piuttosto andare per Mono.Cecil o Microsoft.CCI per l'unico ragione per cui la loro licenza se più accogliente di una di PostSharp. Ma se vogliono solo di sviluppare un aspetto personalizzato, utilizzando PostSharp vi farà risparmiare settimane , e si sarebbe sorpreso dal commerciali potremmo offrire se avete intenzione di ridistribuire PostSharp.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top