2010-11-30 55 views
3

Je travaille pour la première fois avec dotfuscator. Mon projet est écrit en C# et .NET 3.5, il a un programme principal et quelques plugins; c'est la tranche de code qui charge les plug-ins:Impossible de charger l'assemblage obfusqué

// Load the file 
Assembly asm = Assembly.LoadFile(pluginPath); 

// Instantiate the types I need 
foreach(Type type in asm.GetTypes()) 
{ 
    ... 
} 

Maintenant, le problème est le suivant: si je n'Occultation tout va bien, mais quand je l'utilise Dotfuscator asm.GetTypes() jeter un ReflectionTypeLoadException qui dit

The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

J'ai googlé pendant des heures sans résultat. Merci d'avance. Après quelques recherches et déboguages, je pense que c'est un problème dans le manifeste, car la réflexion ne peut pas voir (ou charger) les types à l'intérieur de l'assemblage. J'ai ouvert l'assemblage obfusqué avec Reflector mais tout semble bien.

Répondre

0

Je ne pense pas que l'obscurcissement fonctionne bien avec la réflexion. En fait, je pense que c'est le compromis numéro un lorsqu'on utilise l'obfuscation.

Voir this lien pour savoir comment surmonter les types qui doivent se refléter sur

+0

Le guide officiel dit quelque chose, et je pense que le code devrait fonctionner. En tout cas merci beaucoup pour votre lien, je vais évaluer l'autre obfuscator très bientôt – Fabrizio

1

obscurcissement fonctionne, en partie, en renommant certains ou tous les noms de méthode, les noms de type, etc.

La réflexion peut souvent échouer lorsque obscurcissement est utilisé. Si vous êtes chanceux, vous pouvez être sélectif quand il s'agit de choisir à obfusquer, mais cela nécessite une certaine attention aux détails.

+0

J'ai essayé de désactiver autant de choses que je sais dans dotfuscator, également renommer.Et j'ai aussi essayé de marquer au moins une classe avec [System.Reflection .Obfuscation (Exclude = true)] – Fabrizio

1

Est-ce que vos assemblys sont forts nommés ou Authenticode signés? L'obscurcissement modifie la structure des assemblages et pour les utiliser après l'obfuscation, vous devez les démettre. Les versions commerciales de Dotfuscator prennent en charge la démission des assemblys (à la fois le nom fort et Authenticode) tandis que si vous utilisez la version gratuite de Community Edition, vous devrez démissionner en tant qu'étape de post-construction dans Dotfuscator.

+0

Non, ils ne sont pas ... – Fabrizio