2010-11-30 9 views
3

Ich arbeite zum ersten Mal mit dotfuscator. Mein Projekt ist in C# und .NET 3.5 geschrieben, es hat ein Hauptprogramm und einige Plugins; dies ist das Stück Code, der die Plug-ins lädt:Kann die verschleierte Baugruppe nicht laden

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

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

Nun das Problem ist: Wenn ich verschleiern nicht alles in Ordnung ist, aber wenn ich verwenden Dotfuscator asm.GetTypes() ein Reflection werfen die

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

sagt

Ich googelte stundenlang ohne Ergebnis. Danke im Voraus.

EDIT: Nach ein paar Recherchen und Debugging denke ich, es ist ein Problem in der Manifest, weil die Reflexion kann nicht sehen (oder lädt) die Typen in der Baugruppe. Ich habe die verschleierte Baugruppe mit Reflector geöffnet, aber alles scheint in Ordnung zu sein.

Antwort

0

Ich glaube nicht, Verschleierung funktioniert gut mit Reflexion. In der Tat, ich denke, das ist der wichtigste Kompromiss bei der Verwendung von Verschleierung.

Siehe this Link für wie Arten zu überwinden, die reflektiert werden müssen, über

+0

Der offizielle Leitfaden sagt etwas, und ich denke, dass Code funktionieren sollte. Wie auch immer vielen Dank für Sie Link, werde ich die anderen Obfuscator ziemlich bald bewerten – Fabrizio

1

Obfuscation arbeitet, teilweise durch einige oder alle Methodennamen, Typnamen umbenennen, usw.

Reflexion kann oft fehlschlagen, wenn Verschleierung wird verwendet. Wenn Sie Glück haben, können Sie selektiv sein, wenn es darum geht, zu wählen, was zu verschleiern, aber das erfordert ein wenig Liebe zum Detail.

+0

Ich habe versucht, so viele Sachen wie ich in Dotfuscator deaktivieren, auch umbenennen.Und ich habe auch versucht, mindestens eine Klasse mit [System.Reflection zu markieren .Obfuscation (Exclude = true)] – Fabrizio

1

Sind Ihre Assemblies stark benannt oder Authenticode signiert? Verschleierung verändert die Struktur der Versammlungen und um sie nach der Verschleierung zu benutzen, müssen Sie sie aufgeben.

Die kommerziellen Versionen von Dotfuscator unterstützen das Zurücklassen von Assemblys (sowohl starker Name als auch Authenticode), während Sie, wenn Sie die kostenlose Community Edition verwenden, als Post-Build-Schritt in Dotfuscator zurücktreten müssen.

+0

Nein, sie sind nicht ... – Fabrizio

Verwandte Themen