Не удается загрузить запутанную сборку - PullRequest
3 голосов
/ 30 ноября 2010

Я впервые работаю с dotfuscator.Мой проект написан на C # и .NET 3.5, в нем есть основная программа и несколько плагинов;это фрагмент кода, который загружает плагины:

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

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

Теперь проблема в том, что если я не запутываю, все хорошо, но когда я использую dotfuscator asm.GetTypes(), генерируем исключение ReflectionTypeLoadException, которое говорит

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

Я гуглил часами без результата.Заранее спасибо.

РЕДАКТИРОВАТЬ: После некоторых исследований и отладки я думаю, что это проблема в манифесте, потому что отражение не может видеть (или загружать) типы внутри сборки.Я открыл обфусцированную сборку с помощью Reflector, но все выглядит нормально.

Ответы [ 3 ]

1 голос
/ 30 ноября 2010

Запутывание работает, частично, путем переименования некоторых или всех имен методов, имен типов и т. Д.

Отражение часто может потерпеть неудачу при использовании запутывания. Если вам повезет, вы можете быть осторожны, когда дело доходит до выбора что скрыть, но это требует некоторого внимания к деталям.

1 голос
/ 30 ноября 2010

Являются ли ваши сборки строгими именами или подписаны Authenticode?Запутывание изменяет структуру сборок, и для того, чтобы использовать их после запутывания, вам необходимо отменить их.

Коммерческие версии Dotfuscator поддерживают отставку сборок (как строгое имя, так и Authenticode), если вы используетебесплатной версии для сообщества, вам нужно будет подать в отставку на этапе пост-сборки в Dotfuscator.

0 голосов
/ 30 ноября 2010

Я не думаю, что запутывание работает хорошо с отражением.На самом деле, я думаю, что это компромисс номер один при использовании обфускации.

См. эту ссылку о том, как преодолеть типы, которые должны быть отражены над

...