Допустима ли эта строка кода из декомпилятора 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
и т.д. Но смысл запутывания - сделать этот процесс болезненным.