2016-06-20 2 views
-2

Я пытаюсь декомпилировать один из наших старых исходников, который был разработан в .Net 1.1. Я пробовал пару различных инструментов декомпилятора, но ни один из них не смог дать мне хороший результат, который я могу скомпилировать. обычно есть части кода, которые содержат много ошибок в .Net 1.1, но это отличный код в версии 2.0 или новее. Поэтому я предполагаю, что они декомпилируют более новую версию .Net, чем 1.1. Инструменты, которые я уже использовал: Reflector, dotPeek, CodeReflect и некоторые другие. Мне нужен инструмент, который может декомпилировать в 1.1, и я смог бы скомпилировать тот же код в версии 1.1, он не должен быть свободным инструментом, но мне нужно сохранить код из него, чтобы я мог его скомпилировать..Net 1.1 декомпилирующий инструмент

Спасибо,

+0

Из любопытства, что вы делаете, что обновление до версии 2.0 не является вариантом? –

+0

Вы можете попытаться найти очень старую версию .NET Reflector, это первый декомпилятор .NET AFAIK - другие были сделаны после полного сбоя Red Gate при сохранении их обещания, что инструмент останется свободным после их покупки. –

+0

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

ответ

1

Шансы это собрание было каким-то образом модифицированное (т.е. затемненный, IL оптимизировано, преобразуется в .NET 2.0 и т.д.) после компиляции.

Предполагая, что сборка была создана в C# (также была бы действительна для VB), она была создана в C# 1.2. C 2.0 появился с .NET 2.0. Итак, вы говорите, что декомпиляция выдает действительный код C# 2.0 и недопустимый код C# 1.2, то есть декомпилированный код использует языковые функции, введенные в C# 2.0, такие как генераторы, итераторы и т. Д. Однако все новые функции, внедренные на C# 2.0, реализованы подобно IL-макросам , т. е. компилятор будет генерировать предопределенную часть ИЛ (в некоторых случаях целые методы или классы) для данной языковой функции. Следовательно, эти языковые функции декомпилируются с помощью сопоставления шаблонов IL, то есть декомпилятор ищет эти самые специфические компиляторы, сгенерированные фрагменты IL и преобразует их обратно в языковые функции. Весьма маловероятно, что компилятор C# 1.2 будет генерировать одни и те же шаблоны IL, например. IL, сгенерированный компилятором C# 2.0 для дженериков или итераторов, довольно уникален, и компилятор C# 1.2 вряд ли может сгенерировать что-либо подобное.

Попробуйте использовать JustDecompile на этой сборке, но сделайте это на машине, где установлен .net 1.1 (доступ к ссылочным сборкам помогает декомпилятору). Если это сбой аналогичным образом, пожалуйста, предоставьте декомпилированный недопустимый пример кода C# 1.1

Смежные вопросы