Декомпилировать VB.NET exe в C # (dotPeek & JustDecompile) - PullRequest
0 голосов
/ 23 мая 2018

Итак, у меня есть программа, которая построена из VB.NET, но у меня нет исходного кода, и получить исходный код невозможно, мне нужно изменить программу, чтобы декомпилировать ее с помощью dotPeek & JustDecompile в C #, потому что яЯ могу писать код на C #, но я никогда не изучал VB.NET (я тоже пытался декомпилировать в VB.NET с помощью JustDecompile, но для меня это выглядит намного сложнее, чем 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, эти коды из-за этого?Это нормально или я могу удалить такие коды?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Этот ответ поможет кому-то понять проблему и найти собственное решение.

  1. Просто создайте свое небольшое приложение и затем скомпилируйте его в .exe-файл.
  2. Затем декомпилируйтеэтот .exe файл с тем же декомпилятором, который вы использовали.
  3. Теперь вы видите там тот же странный код и знаете, что его там не поместили.

Спасибо.

0 голосов
/ 23 мая 2018

У вас есть отладочная версия проекта VB Winform.Вещество со слабыми ссылками используется отладчиком и не генерируется для сборок выпуска.

VB создает свойство для каждого Dim WithEvents ControlName As ControlType, для которого также существует метод, украшенный Handles ContolName.EventName.Установщик свойства содержит код подключения события, который заставляет обрабатывать событие материал.

Например, кнопка и ее событие щелчка.

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.Как только вы узнаете шаблон, это будет намного проще.

...