2010-12-02 35 views
2

J'utilise actuellement MEF dans une architecture de plugin. Je suis sur le point d'obscurcir mon code et j'ai eu une inquiétude si cela muck up MEF et c'est découverte. J'utilise un DirectoryCatalog pour résoudre les plugins et je prévois d'obfusciter les plugins. Certaines extensions sont également exécutées dans l'assemblage principal, qui sera également obscurci. Donc, ma question est de savoir si ce sera un problème avec MEF (l'obfuscation) et si oui, est-ce que Unity souffre également de la même chose? Merci d'avance.Des problèmes avec MEF et/ou unité lors de l'obscurcissement?

Répondre

1

Puisque (dans un monde idéal) bbfuscation ne change pas la compatibilité binaire d'un assemblage, je ne vois aucun problème à venir. Cela dit, je n'ai pas vraiment travaillé avec des assemblages obfusqués et des MEF, donc je peux me tromper.

+0

Le point sous-jacent ici est, je pense que vous aurez besoin de le tester pour être sûr que cela affectera votre code. – Nate

+1

En fait, après avoir lu plus de q/a sur SO je pense que je vais renoncer à l'obfuscation. Je ne suis pas vraiment préoccupé par la protection de mon IP de l'observateur occasionnel et si quelqu'un est vraiment motivé l'obfuscation ne les arrêtera pas de toute façon. La seule façon d'avoir vraiment une protection est de crypter et je ne veux pas prendre cette baisse de performance. – SRM

+0

Je suis d'accord. Dans la plupart des cas, ce n'est pas vraiment la peine. – Nate

4

J'ai rencontré un problème avec Unity and Obfuscation. Dans ce cas, les dépendances à résoudre par unité ont été marquées avec l'attribut [ServiceDependency] sur les propriétés. Une propriété dans IL n'est rien d'autre qu'une méthode Get- et Set-! liés ensemble par des métadonnées. C'est ce qui constitue une propriété, rien d'autre. L'obfuscation est apparue et a remplacé la propriété par les méthodes natives Get et Set. Pouvez-vous voir le problème? La propriété est partie (remplacée par des méthodes). Aucune propriété ne signifie qu'aucun attribut [ServiceDependency] sur la propriété ne signifie que l'injection de dépendances signifie que la référence est nulle. Crash! La solution consistait à marquer les propriétés avec [ServiceDependency] AND [Obfuscation (Feature = "renommer", Exclude = true)] (Partie de .Net Framework).

Si c'est important pour vous: L'obfuscation a été effectuée avec Dotfuscator Professional.

+0

Je voudrais pouvoir marquer les deux réponses comme correctes, car cela est extrêmement utile pour moi. J'ai fini par rouler ma propre PMDI (injection de la dépendance pauvre de l'homme) et je me bats avec elle. Je voudrais revisiter Unity et cela aide énormément. Je vous remercie! – SRM