मैं एक परियोजना पर OSX netcoreapp1.0
को निशाना बनाने पर काम कर रहा हूँ, और मैं एक स्क्रिप्ट इस तरह रोसलिन का उपयोग कर सेट कर रहा हूं:.NET कोर पर Roslyn Scripting API: क्यों संकलक शिकायत करता है "त्रुटि CS1501: WriteLine के लिए कोई ओवरलोड 2 तर्क नहीं लेता है"?
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();
कहाँ Globals
है:
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 को संक्षेप में देखा कि क्या कोई अजीब प्रकार-अग्रेषण या एक्सटेंशन विधि चाल चल रही है, जिसे स्क्रिप्ट सेटअप में अतिरिक्त देखभाल की आवश्यकता हो सकती है, लेकिन मुझे वहां कुछ असामान्य दिखाई नहीं दे रहा था (शायद मुझे कुछ याद आया)।
रोज़लिन ScriptBuilder
क्यों इस बारे में शिकायत करेगा?
जब आप नई स्वरूपण शैली का उपयोग करते हैं तो क्या होता है? यानी 'कंसोल। राइटलाइन ($ "Args [0]: {Args [0]}"); ' – PhillipXT
सुझाव के लिए धन्यवाद, @PhillipXT। यह स्ट्रिंग इंटरपोलेशन सिंटैक्स के साथ काम करता है, लेकिन यह अंतर्निहित मुद्दे पर पपरिंग है - स्क्रिप्ट वास्तव में केवल 'कंसोल। राइटलाइन' से अधिक है, लेकिन मैं असेंबली संदर्भों के साथ कई त्रुटियों में भाग ले रहा हूं। उम्मीद है कि यहां असली समस्या का पता लगाने से अन्य समस्याओं के लिए रास्ता भी प्रकाश में मदद मिलेगी। –
बस जांचना और सुनिश्चित करना चाहता था कि Args [0] किसी भी तरह की समस्या नहीं थी। निश्चित नहीं है कि WriteLine के साथ और क्या गलत हो सकता है ... – PhillipXT