Мы добавили возможность для наших пользователей писать сценарии C # для выполнения приложения, которые компилируются и запускаются во время выполнения. Скрипты могут обращаться к API, который мы предоставили, и они компилируются / запускаются CSharpCodeProvider.
Я обнаружил, что код, скомпилированный во время выполнения, имеет проблемы при вызове метода с необязательными аргументами, например:
public void BlackmailColonelMustard(int amount, string myAlias, bool tellHisWifeAnyway = true)
Если скомпилированный во время выполнения сценарий вызывает BlackmailColonelMustard (10000, «Mr Boddy»), компилятор жалуется на отсутствие перегруженного метода с двумя аргументами, вместо того, чтобы распознавать значение по умолчанию для третьего параметра.
Естественно, он отлично работает при вызове из предварительно скомпилированного кода. Кто-нибудь знает, что я делаю не так?
Это потому, что VS2010 (даже до .NET 4) достаточно умен, чтобы скомпилировать код, использующий необязательные параметры, но среда выполнения .NET 3.5 еще не научилась этому трюку?
CSharpCodeProvider
использует правила C # 3.0, которые исключают использование необязательных параметров. - person dlev   schedule 23.06.2012