2

我们为用户添加了一项功能,可以编写 C# 脚本供应用程序执行,这些脚本在运行时编译和运行。这些脚本可以访问我们公开的 API,它们由 CSharpCodeProvider 编译/运行。

我发现在运行时编译的代码在调用带有可选参数的方法时会出现问题,例如:

public void BlackmailColonelMustard(int amount, string myAlias, bool tellHisWifeAnyway = true)

如果运行时编译的脚本调用BlackmailColonelMustard(10000, "Mr Boddy"),编译器会抱怨没有只有两个参数的重载方法,而不是识别第三个参数的默认值。

当从预编译代码调用时,它自然可以正常工作。有人知道我在做什么错吗?

是不是因为 VS2010(甚至是 .NET 4 之前的版本)足够聪明,可以编译使用可选参数的代码,但 .NET 3.5 运行时还没有学会这个技巧?

4

1 回答 1

3

C# 4.0 中引入了可选参数。如果可能,将编译器版本设置为 4.0:

Dictionary<string, string> options = new Dictionary<string, string>();
options.Add("CompilerVersion", "v4.0");
CSharpCodeProvider provider = new CSharpCodeProvider(options);
于 2012-06-22T20:53:46.180 回答