私はOSX上netcoreapp1.0
をターゲットプロジェクトに取り組んでいる、と私はこのようロズリンを使用してスクリプトを設定してい:.NET上のRoslyn Scripting API:なぜコンパイラは「エラーCS1501:WriteLineのオーバーロードに2つの引数が必要ですか?
Globals
がある
var scriptText = File.ReadAllText(args[0]);
var scriptOptions = ScriptOptions.Default
.WithReferences(
typeof(System.Object).GetTypeInfo().Assembly
);
var script = CSharpScript.Create(scriptText, scriptOptions, typeof(Globals));
var scriptArgs = new string[args.Length-1];
Array.Copy(args, 1, scriptArgs, 0, args.Length-1);
script.RunAsync(new Globals
{
Args = scriptArgs
})
.GetAwaiter().GetResult();
:
public class Globals
{
public string[] Args { get; set; }
}
私が実行しようとするとこのようになりますスクリプト:
using System;
Console.WriteLine("Args[0]: {0}", Args[0]);
プログラムはこの例外で終了:
$ dotnet run test.csx
Project BitThicket.DotNet.ScriptTool (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Script error: Microsoft.CodeAnalysis.Scripting.CompilationErrorException: (7,9): error CS1501: No overload for method 'WriteLine' takes 2 arguments
at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.ThrowIfAnyCompilationErrors(DiagnosticBag diagnostics, DiagnosticFormatter formatter)
at Microsoft.CodeAnalysis.Scripting.ScriptBuilder.CreateExecutor[T](ScriptCompiler compiler, Compilation compilation, CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Scripting.Script`1.GetExecutor(CancellationToken cancellationToken)
at Microsoft.CodeAnalysis.Scripting.Script`1.RunAsync(Object globals, Func`2 catchException, CancellationToken cancellationToken)
at BitThicket.DotNet.ScriptTool.Program.Main(String[] args) in /Users/ben/proj/bt/dotnet-scriptcs/src/BitThicket.DotNet.ScriptTool/Program.cs:line 63
明らかにConsole
は、実際には2つの方法をとるオーバーロードを持っています。私はCoreFx sourcesを少し見て、スクリプト設定で追加の注意が必要かもしれない奇妙なタイプフォワーディングまたは拡張メソッドのトリックがあるかどうかを確認しましたが、何か珍しいことはありませんでした。
なぜRoslyn ScriptBuilder
がこれに不満を持ちますか? .NETのコア、Console
クラスで
新しい書式設定を使用するとどうなりますか? 'Console.WriteLine($" Args [0]:{Args [0]} ");' – PhillipXT
提案のおかげで@PhillipXT。これは文字列補間構文で動作しますが、根本的な問題よりもはるかに優れています。実際には、このスクリプトは単にConsole.WriteLine以上の機能を果たしますが、アセンブリ参照に関連するいくつかのエラーが発生しています。実際の問題をここで理解しておけば、他の問題の解決にも役立ちます。 –
ちょうどArgs [0]が何とか問題ではないことを確認して確認したかったのです。 WriteLineで何が間違っているのか分かりません... – PhillipXT