我正在尝试从我继承的VB.net 2.0应用程序中恢复丢失的代码。我有当前的工作版本,所以我尝试使用RedGate Reflector和Telerik JustDecompile来恢复代码。两者都将成功返回可读和Visual Studio项目文件的代码文件,但是当我尝试运行反编译程序时,我收到102条错误消息(两个反编译器)。
我从旧版本开始运行Visual Studio项目,这些项目运行良好,但解决方案和代码文件的结构完全不同,我担心程序自那时起就变得过多,无法信任这些旧版本。
包含的唯一奇怪的装配是SmartCodeDeveloper 1.0.2986.26049
。我怀疑代码最初是用Visual Studio 2005编写的,因为2008和2012都希望在打开解决方案时进行升级。
我还能做些什么来恢复这个程序?我有代码,但是其他东西阻止它运行,而且我处于deadend。
编辑:
我得到的一些错误信息是:
- “预期陈述结束”或“陈述不能出现在事件正文中。假定事件结束。”
- 对象中缺少“RemoveHandler”定义的变体。
- 未声明对象“由于其保护级别可能无法访问。”
编辑2:
尝试反编译成C#有什么好处吗?是否有可能Reflector可以更好地转换到那个?那些不同的.NET框架版本呢?我一直在做2.0,我相信它是在开发的。
答案 0 :(得分:1)
Reflector将创建不是VB代码的代码,即。 var ++。你必须找到并修复它们。它还将创建许多不起作用的事件定义。查找代码,如公共自定义事件定义。删除Custom关键字以及后面的所有行,直到End Event。您还需要确定所需的Import语句。
以下是Reflector的一个例子
Public Custom Event ColumnChanging As DataColumnChangeEventHandler
AddHandler(ByVal value As DataColumnChangeEventHandler)
Bid.Trace("<ds.DataTable.add_ColumnChanging|API> %d#" & ChrW(10), Me.ObjectID)
Me.onColumnChangingDelegate = DirectCast(Delegate.Combine(Me.onColumnChangingDelegate, value), DataColumnChangeEventHandler)
End AddHandler
RemoveHandler(ByVal value As DataColumnChangeEventHandler)
Bid.Trace("<ds.DataTable.remove_ColumnChanging|API> %d#" & ChrW(10), Me.ObjectID)
Me.onColumnChangingDelegate = DirectCast(Delegate.Remove(Me.onColumnChangingDelegate, value), DataColumnChangeEventHandler)
End RemoveHandler
End Event
将改为:
Public Event ColumnChanging As DataColumnChangeEventHandler
缺少引用也会导致许多错误。
答案 1 :(得分:1)
之前我曾见过同样的问题。由另一名成员描述。 它很容易纠正。 你有这100多个错误的原因通常是因为一些微不足道的...... 就像一个未终止的strig例如。 然而,一个简单的错误会推动其他所有内容不同步,因此显示的错误比实际错误的实际数量要多,因为第一个错误(问题原因)导致了阶梯效应。
处理它的最佳方法如下......
1 - Open your solution
2 - Close all document windows - so no solution documents are displayed
3 - Compile your solution
4 - At this point your errors should be minimised to a much lower amount of errors like maybe 1 to 10 for example.
尝试并告诉我您完成上述操作后列出的错误数量。