2016-08-03 3 views
1

ScriptCSの初心者の問題が少しあり、これに対する回答が見つかりません。 ScriptCSを使用して、ホストされているアプリケーションを動的に拡張したいと考えています。このためには、スクリプトにパラメータを渡し、スクリプトから値を取得する必要があります。私は現在、私は、スクリプトの実行をテストしていた例コンソールapplicatinを持っている:.NetアプリケーションからScriptCSのパラメータを取得する

Program.csの

using ScriptCs.Hosting; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using ScriptCs.Contracts; 
using ScriptCs; 
using ScriptCs.Engine.Mono; 
using ScriptCs.Engine.Roslyn; 
using System.Diagnostics; 
namespace ScriptCsPoc 
{ 
    class MainClass 
    { 
     public static void Main(string[] args) 
     { 
      var console = (IConsole)new ScriptConsole(); 
      var logProvider = new ColoredConsoleLogProvider(LogLevel.Info, console); 

      var builder = new ScriptServicesBuilder(console, logProvider); 

      SetEngine(builder); 
      var services = builder.Build(); 

      var executor = (ScriptExecutor)services.Executor; 
      executor.Initialize(Enumerable.Empty<string>(), Enumerable.Empty<IScriptPack>(), "Guten Tag aus der Konsole"); 
      ExecuteLooseScript(executor); 
      ExecuteFile(executor); 
      ExecuteFileFromCommandLine(); 
     } 

     public static void ExecuteLooseScript(ScriptExecutor executor) 
     { 
      var script = @"Console.WriteLine(""Hello from scriptcs"")"; 
      executor.ExecuteScript(script); 
     } 

     public static void ExecuteFile(ScriptExecutor executor) 
     { 

      ScriptResult result = executor.Execute("HelloWorld.csx", "parameter"); 
      Console.WriteLine("Done Script"); 
     } 


     public static void ExecuteFileFromCommandLine() 
     { 

      Process cmd = new Process(); 
      cmd.StartInfo.FileName = "cmd.exe"; 
      cmd.StartInfo.RedirectStandardInput = true; 
      cmd.StartInfo.RedirectStandardOutput = true; 
      cmd.StartInfo.CreateNoWindow = true; 
      cmd.StartInfo.UseShellExecute = false; 
      cmd.Start(); 

      cmd.StandardInput.WriteLine("scriptcs HelloWorld.csx -- blubber"); 
      cmd.StandardInput.Flush(); 
      cmd.StandardInput.Close(); 
      cmd.WaitForExit(); 
      string standardOut = cmd.StandardOutput.ReadToEnd(); 
      Console.WriteLine("Done Script"); 
     } 
     static void SetEngine(ScriptServicesBuilder builder) 
     { 
      var useMono = Type.GetType("Mono.Runtime") != null; 
      if (useMono) 
      { 
       builder.ScriptEngine<MonoScriptEngine>(); 
      } 
      else { 
       builder.ScriptEngine<CSharpScriptEngine>(); 
      } 
     } 
    } 
} 

をHelloWorld.csx

#load child/greeter.csx 
var greeter = new Greeter(); 
if (Env.ScriptArgs.Count > 0) 
    greeter.Greet(Env.ScriptArgs[0]); 
else 
    greeter.Greet("Inside Script"); 

greeter.csx

public class Greeter { 
    public void Greet(string message) { 
     Console.WriteLine(message); 
    } 
} 

私はコンソール(ExecuteFileFromCommandLine())の呼び出しの中でスクリプトを呼び出すことができますが、 ScriptExecutor-Classのインスタンスを使用すると、渡された引数はEnv.ScriptArgsでは使用できません。 ScriptExecutorクラスからどのようにパラメータを取得できますか?種類で

がわかりまし

答えて

0

に関しては、これに対する解決策は、追加のプロジェクトの上に行く:Scriptcsambientで

https://github.com/swn1/scriptcsambient

簡単ScriptCSスクリプトにパラメータを与え、値を取得することが可能ですそれから戻ってくる。

種類について

関連する問題