Вы должны указать тип входа. Если вы не хотите, чтобы метод принимал какие-либо параметры, определите пустой тип сообщения, например:
message WhoAreYouParams {}
. Причина, по которой это требуется, заключается в том, что если вам позже потребуется добавить необязательный параметр, вы можете сделать это, не нарушая существующий код.
Я думаю , что никаких изменений IL как таковых не было, но были существенные изменения в реализации CLR для создания динамических методов более эффективен, позволяет компилировать дерево выражений и т. д. Я, кажется, помню, что были изменения в безопасности построения динамических методов, чтобы сделать возможным для лямбда-выражений, генерирующих деревья выражений, вызывать частные методы для работы даже в средах с относительно низким уровнем доверия. Компилятор знает, что вызывать частный метод допустимо, поскольку точка, в которой компилируется исходный код, имеет к нему доступ. Хотя доказать это непросто :) См. эту заметку Эрика Липперта .
Стандартная среда CLR (версия 2.0.50727) не изменилась со времени .NET 2.0, поэтому ваш IL идентичен. (См. Также этот SO QA )
.. и в результате, если вы хотите, вы можете использовать множество функций .NET 3.5 в проекте .NET 2.0, если вы используете последний компилятор: