我们为用户添加了一项功能,用于编写要执行的应用程序的C#脚本,这些脚本在运行时编译和运行。脚本可以访问我们公开的API,它们由CSharpCodeProvider编译/运行。
我发现在运行时编译的代码在调用带有可选参数的方法时会出现问题,例如:
public void BlackmailColonelMustard(int amount, string myAlias, bool tellHisWifeAnyway = true)
如果编译时运行时脚本调用 BlackmailColonelMustard(10000,“Mr Boddy”),编译器会抱怨没有重载方法只有两个参数,而不是识别第三个参数的默认值
当从预编译代码调用时,它自然会正常工作。谁知道我做错了什么?
是因为VS2010(甚至pre-.NET 4)足够聪明,可以编译使用可选参数的代码,但是.NET 3.5运行时还没有学到这个技巧吗?
答案 0 :(得分:3)
C#4.0中引入了可选参数。如果可能,将编译器版本设置为4.0:
Dictionary<string, string> options = new Dictionary<string, string>();
options.Add("CompilerVersion", "v4.0");
CSharpCodeProvider provider = new CSharpCodeProvider(options);