所以我有一个用VB.NET构建的程序,但没有源代码,也不可能得到源代码,我需要修改程序,所以我用dotPeek& JustDecompile to C#因为我可以用C#编写代码但是我从来没有真正学过VB.NET(我也试过用JustDecompile反编译成VB.NET但是对我来说它看起来比C#更麻烦)。但反编译的项目充满了奇怪的代码,当我尝试将C#exe和dll反编译为C#项目时,我看不到这些代码。它充满了看起来不应该存在的代码(看起来像在场景代码后面),如:
private static List<WeakReference> __ENCList;
lock (finvendor.__ENCList)
finvendor.__ENCList.Add(new WeakReference((object) this));
[AccessedThroughProperty("controlname")] //for every controls
对于我在C#中找不到的每个控件,它也充满了这种代码:
internal virtual CheckEdit chkNonAktif
{
[DebuggerNonUserCode] get
{
return this._chkNonAktif;
}
[DebuggerNonUserCode, MethodImpl(MethodImplOptions.Synchronized)] set
{
EventHandler eventHandler = new EventHandler(this.chk_CheckedChanged);
if (this._chkNonAktif != null)
this._chkNonAktif.CheckedChanged -= eventHandler;
this._chkNonAktif = value;
if (this._chkNonAktif == null)
return;
this._chkNonAktif.CheckedChanged += eventHandler;
}
}
使用Devexpress版本10,这是因为这些代码吗?这是正常的还是我可以删除这些代码?
答案 0 :(得分:2)
您有VB Winform项目的调试版本。调试器使用弱引用内容,而不是为发布版本发出。
VB为每个Dim WithEvents ControlName As ControlType
创建一个属性,其中还有一个用Handles ContolName.EventName
修饰的方法。属性setter包含使 Handles Event 内容工作的事件连接代码。
例如按钮及其点击事件。
Friend WithEvents Button1 As Button
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
'some code
End Sub
将导致生成此属性:
Friend Overridable Property Button1 As Button
<CompilerGenerated> _
Get
Return Me._Button1
End Get
<MethodImpl(MethodImplOptions.Synchronized), CompilerGenerated> _
Set(ByVal WithEventsValue As Button)
Dim handler As EventHandler = New EventHandler(AddressOf Me.Button1_Click)
Dim button As Button = Me._Button1
If (Not button Is Nothing) Then
RemoveHandler button.Click, handler
End If
Me._Button1 = WithEventsValue
button = Me._Button1
If (Not button Is Nothing) Then
AddHandler button.Click, handler
End If
End Set
End Property
您可能还有许多名称为My_XYZ的类,它们支持VB的应用程序框架。
我建议您使用一些控件/事件处理程序创建一个新的VB WinForm项目,然后对其进行反编译,以便您可以看到解编译器如何从IL重现锅炉板的内容。一旦你了解了这个模式,它就会容易得多。
答案 1 :(得分:0)
我是这个答案可以帮助某人理解问题并找到自己的解决方案。
谢谢。