7

バックグラウンド

いくつかのステータス チェックを実行する ac# アプリケーションを作成しています (nagios スタイルのチェックを考えてください)。

私が理想的に望むのは、この c# アプリケーションが特定のディレクトリを見て、その中の scriptcs スクリプトをコンパイル/実行し、結果に基づいて行動することです (たとえば、ステータス チェックの失敗に対して電子メール アラートを送信します)。

スクリプトが (たとえば) 整数か何かを返すことを期待します。その整数は、ステータス チェックが成功したか失敗したかを示します。

C# アプリケーションに返される値。

0 - Success
1 - Warning
2 - Error

最初にこれを任されたとき、これは MEF の仕事だと思っていましたが、プロジェクトを作成したり何かをコンパイルしたりせずにこれらの「ステータス チェック」を作成する方がはるかに便利です。フォルダー内に scriptcs スクリプトを配置するだけの方がはるかに魅力的です。 .

だから私の質問は

  1. ac# app と scriptcs を一緒に使用するためのドキュメント/サンプルはありますか (Google はあまり知りませんでした)?

  2. これは scriptcs の使用例ですか、それとも実際にこのように使用することを意図したものではありませんか?

  3. roslyn または何らかの動的なコンパイル/実行を使用してカスタム ソリューションを作成するだけで、より簡単になりますか? (私はscriptscの経験がほとんどありません)

4

4 に答える 4

2

質問 2 : スクリプト言語について少し理解している限り、この状況ではスクリプト言語がうまく機能する可能性があります。

質問 3 : 個人的には、適切に管理されたCS-Scriptを使用します。そのためのドキュメントも多数あります。

于 2014-12-05T21:03:38.027 に答える
1

質問 1. System.Diagnostics.Process.Start() を使用して C# から ScriptCS を実行する (醜い) サンプル統合テストを作成しました (この場合は Powershell が関係します)。

    [Test, Explicit]
    public void RunScriptCsFile_FilePrintsTheValue2_StreamIsParsedCorrectly() {
        var scriptFile = @"C:\Projects\test-project\test-project.Tests\test-file.csx";
        var param = string.Format("scriptcs {0}", scriptFile);
        Process executeScript = new Process {
            StartInfo = new ProcessStartInfo {
                FileName = "powershell.exe",
                Arguments = param,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                CreateNoWindow = true
            }
        };

        executeScript.Start();
        var value = -1;
        while (!executeScript.StandardOutput.EndOfStream) {
            string line = executeScript.StandardOutput.ReadLine();
            if (int.TryParse(line, out value)) {
                Assert.AreEqual(2, value);
            }
        }
    }

test-file.csxConsole.WriteLine("2");には、ケースの「エラー」の例としてのみ含まれています。

質問 3. ScriptCS 用のShovel ScriptPackで同様のことを行いました。確認する価値があるかもしれません。

于 2014-12-21T15:42:07.960 に答える