2

ユーザーがアプリケーションを実行するための C# スクリプトを記述できる機能を追加しました。このスクリプトは実行時にコンパイルおよび実行されます。スクリプトは公開されている API にアクセスでき、CSharpCodeProvider によってコンパイル/実行されます。

オプションの引数を使用してメソッドを呼び出すと、実行時にコンパイルされたコードに問題があることがわかりました。

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

実行時にコンパイルされたスクリプトがBlackmailColonelMustard(10000, "Mr Boddy")を呼び出す場合、コンパイラは、3 番目のパラメーターの既定値を認識するのではなく、引数が 2 つしかないオーバーロードされたメソッドはないと警告します。

もちろん、コンパイル済みコードから呼び出すと正常に動作します。私が間違っていることを知っている人はいますか?

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 に答える