Допустима ли эта строка кода из декомпилятора ILSpy?

Я декомпилировал сборку релиза, используя ILSPy, и получил код, как показано ниже. Когда я открываю декомпилированный проект в VS 2013, я получаю сообщение об ошибке для каждого из этих утверждений.

using #j;//this line shows up as an error in VS2013
using System;

Ошибка:

Директивы препроцессора должны отображаться как первый непробельный символ в строке

Я получаю аналогичную ошибку в следующей строке также.

string path = #db.#ab(HttpUtility.UrlDecode(text));

Вопрос: в чем смысл использования # и как я могу исправить эти ошибки?

Я также заметил, что некоторые декомпилированные классы имеют имена, начинающиеся с # и так делают некоторые пространства имен и имена методов. Я никогда не использовал такое соглашение об именах, поэтому очень странно, как ILSpy придумал такой код.

1 ответ

Решение

Нет, это не действительно C#. Скорее всего, это декомпилированный код, который был запутан для начала, поэтому используются идентификаторы, которые действительны в IL, но не в C#.

Как правило, если вы декомпилируете запутанный код, вы делаете что-то вопреки желанию первоначальных авторов кода - поэтому я бы предложил просто не делать этого. Если вы считаете, что у вас есть законная причина для получения исходного кода чего-либо, спросите об этом автора.

Не могли бы вы преобразовать это в действительный C#? Конечно - просто бери каждый #с префиксным идентификатором и сопоставить его (последовательно) с чем-то другим, например

using hashj;
...

string path = hashdb.hashab(HttpUtility.UrlDecode(text));

... и в конце концов вы столкнетесь с классом #db который вы затем переименовали бы в hashdb и т.д. Но смысл запутывания - сделать этот процесс болезненным.

Другие вопросы по тегам