【发布时间】:2013-03-22 12:43:32
【问题描述】:
我们出于内部目的使用 vb.net 开发了项目,然后我们对其进行了混淆处理。它正在抛出如下所述的错误。
“未找到类型‘e’上的公共成员‘Var1’。”
代码:
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 等是这种形式的公共变量。
我们尝试过的混淆工具是——
SmartAssembly 6
PreEmptive Dotfuscator and Analytics CE(随 Visual Studio 2012 提供)
没有混淆的 exe 可以正常工作。
在子例程中分配变量“Var1”时引发错误。如果代码行修改如下,那么混淆的 exe 就可以正常工作了。
FrmMain.Var1= Row("ChangesDbName").ToString
我们认为混淆缺少后期绑定并在一个小型示例项目中尝试了类似类型的代码。但这没有任何错误。我们附上了这个小代码。但由于其规模庞大,我们无法上传原始项目。
我们如何追踪错误?
您可以找到我的示例应用程序的源代码here
【问题讨论】:
-
所以它是一个内部应用程序。你发布了源代码。混淆它还有什么意义???
-
这只是一个错误的示例代码
-
eazfuscator.net 生成相同的错误(混淆时)
-
我认为这可能是因为当您的代码被混淆时,Var1 的公共名称也会被混淆,您需要找到一种方法让您的混淆工具不会发生这种情况
标签: vb.net obfuscation dotfuscator smartassembly