2016-05-21 6 views
2

Итак, я запустил университетскую программу C# через de4dot, а затем отражатель, чтобы декомпилировать ее, и появилась следующая ошибка, когда я запустил ее в VS.Декомпиляция приводит к ошибке CS1112, сбою сборки

[сборка: System.Runtime.CompilerServices.Extension]

CS1112 Ошибка Не используйте 'System.Runtime.CompilerServices.ExtensionAttribute'. Вместо этого используйте ключевое слово «this» . Клиент C: \ Users \ user \ Desktop \ 333 \ as2 \ deb \ AssemblyInfo.cs 15 Active

Я попытался заменить код этим и этим() между прочим, но это просто вызывает другие проблемы. Может кто-нибудь объяснить, что я должен заменить «этим»? Я чувствую, что мне не хватает чего-то очевидного здесь.

ответ

3

Вы предназначены, чтобы добавить модификатор this к методу:

public static class FooExtensions 
{ 
    public static void DoSomething(this Foo foo) 
    { 
     ... 
    } 
} 

Это делает метод расширения.

В общем, я бы не стал использовать декомпилятор для кода «туда и обратно» - декомпиляторы могут быть полезны для просмотра того, что сделал на самом деле компилятор, но есть различные ситуации, когда результат не будет компилироваться ,

+2

Хуже, бывают ситуации, когда результат не будет _correct_ (даже если он скомпилируется). –

2

Атрибут [assembly: Extension] добавляется в сборку компилятором, когда сборка содержит методы расширения. Это происходит автоматически и на основе ошибки, которую вы видите, компилятор не хочет, чтобы вы делали это явно. Предполагая, что остальная часть вывода декомпилятора корректна, закомментируйте атрибут уровня сборки, и вы должны быть в порядке.

При этом не следует полагать, что выход декомпилятора правильный.

+0

это возвращает предупреждение о том, что оно будет проигнорировано – batmaci