Мы разработали проект с использованием vb.net для наших внутренних целей, а затем запутали его. Выдает ошибку, как указано ниже.
«Открытый член «Var1» для типа «e» не найден».
Код:
Public Sub get_constants_from_DbList(ByRef frm As Object, ByRef sDbname As String)
For Each Row As DataRow In CommonObj.DSCommonProc.Tables("dblist").Rows
If StrComp(Row("DbName").ToString, sDbname, CompareMethod.Text) = 0 Then
prg_id = Row("PrgId").ToString
frm.Var1= Row("ChangesDbName").ToString
frm.Var2 = Row("LoadTableName").ToString
frm.Var3 = Row("ServerName").ToString
Exit Sub
End If
Next
End Sub
Форма (с именем FrmMain) передается параметру frm из вызывающей процедуры в эту подпрограмму. Var1 и т. д. являются общедоступными переменными в этой форме.
Инструменты запутывания, которые мы пробовали:
Умная сборка 6
PreEmptive Dotfuscator and Analytics CE (входит в состав Visual Studio 2012)
Без обфускации exe работает нормально.
Возникает ошибка при назначении переменной «Var1» в подпрограмме. Если строка кода изменена, как показано ниже, запутанный exe будет работать нормально.
FrmMain.Var1= Строка("ChangesDbName").ToString
Мы подумали, что в обфускации отсутствует позднее связывание, и попробовали аналогичный тип кода в небольшом примере проекта. Но в этом не было ни одной ошибки. Мы прикрепили этот небольшой код. Но из-за его масштабности мы не можем загрузить оригинальный проект.
Как мы можем отследить ошибку?
Вы можете найти исходный код моего примера приложения здесь