Проблема приведения после обфускации с помощью Dotfuscator

Я пытаюсь запутать какое-то приложение VB.NET 2003.

Полученные сборки запутаны и "запускаются" с некоторыми ошибками.

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

Я загружаю Combobox, используя их свойства источника данных, используя коллекцию «VTPair» (класс, созданный мной с двумя свойствами: одно строкового типа, а другое — объектного типа для хранения значения)

Этот выпадающий список обрабатывает такие пары, как «Мужской | М» или «Женский | Ж».

Пытаясь увидеть, что выбрано, я использую if mycombo1.SelectedValue = "M" then

Этот код после обфускации выдает мне исключение, которое не может преобразовать тип «XX» в строку «M».

Итак, я изменил код на что-то более правильное, явно приведя выбранное значение к String:

if ctype(mycombo1.SelectedValue,string) = "M" then

Но ошибка та же.

При отладке моего исходного кода свойство SelectedValue имеет тип «Объект», но это строка.

Я попытался использовать свойство ComboBox.SelectedItem, которое также является объектом, но на этот раз то, что находится внутри, имеет тип «VTPair» (мой собственный класс), а затем пытается получить доступ к его свойству «Value» (которое имеет тип Object) и пытается привести к строка снова не работает.

Есть ли у кого-нибудь идея «перевести» этот фрагмент кода, чтобы он работал нормально после Dotfucate?

Спасибо!


person Romias    schedule 01.03.2010    source источник
comment
За исключением исключения при чтении значения, является ли пользовательский интерфейс правильным, т. е. ожидаемые значения отображаются в поле со списком?   -  person Timores    schedule 01.03.2010


Ответы (2)


Из MSDN:

Свойство ListControl.SelectedValue: получает или задает значение свойства члена, указанного свойством ValueMember.

Таким образом, любое свойство NAME, которое вы задали для свойства ValueMember, будет использоваться при использовании свойства SelectedValue. Таким образом, вам может потребоваться исключить из обфускации свойство, которое вы указываете через свойство ComboBox.ValueMember.

person logicnp    schedule 02.03.2010
comment
Я исключил из обфускации весь класс с парой Text/Value и заработал. Но я никогда не думал, что проблема заключается в свойстве ValueMember. Большое спасибо! - person Romias; 03.03.2010

Не уверен в синтаксисе VB, но в С#, я думаю, вам нужно что-то, где правая сторона - typeof (MyType). Таким образом, тип будет запутан, чтобы соответствовать переименованному типу.

person No Refunds No Returns    schedule 01.03.2010
comment
Это очень верно для проблем с отражением. Если вы используете GetType.ToString(), а затем сравниваете его... после запутывания это не сработает. Но мой случай - проблема CAST. - person Romias; 01.03.2010
comment
myCombo.SElectedValue.ToString() ? - person No Refunds No Returns; 01.03.2010