2011-01-01 14 views
3

Monoには比較的新しいので、アプリケーションにC#スクリプト機能を追加しようとしています。私はMiguel de Icazaによってこれを見つけましたblog post。 C#コンパイラをサービスとして呼び出す方法は、Mono.CSharpをインクルードし、Evaluatorクラス、特にEvaluateメソッドまたはRunメソッドを使用することです。これは、hereと記載されています。だからここMono C#コンパイラをサービスとして使用する(エラー)

は私のサンプルコード(このテーマに、インターネット上の他のブログの記事から派生し、はい、私は私のグーグルをやった)

using System; 
using Mono.CSharp; 

namespace EvalTest 
{ 
    public class Test 
    { 
    static void Main(string [] args) 
    { 
     Mono.CSharp.Evaluator.Evaluate("using System;"); 
     Mono.CSharp.Evaluator.Run("using System;"); 
    } 
    } 
} 

であり、我々はそれをコンパイルしようとしたとき、私は、これらのエラーを取得します:

eval.cs(10,19): error CS0234: The type or namespace name `Evaluator' does not exist in the namespace `Mono.CSharp'. Are you missing an assembly reference? 
eval.cs(11,19): error CS0234: The type or namespace name `Evaluator' does not exist in the namespace `Mono.CSharp'. Are you missing an assembly reference? 

すべてのMonoコンパイラを使用してLinuxとOSXで同じことが起こります。私はSilverlightも試みました。私は同様の質問のためにstackoverflowを検索し、誰もがMiguelのブログ記事といくつかの同様のサンプルコードを参照しています。私は何が欠けていますか?私は追加する必要があるいくつかのコンパイラフラグはありますか?ご協力いただきありがとうございます。

答えて

6

あなたはブログの記事のこのビットを行いました:

使い方は非常に簡単です、あなたは `gmcs.exe」アセンブリ

を参照する必要がありますか?これは私が(Test.csで)あなたのコードで何をしたかである:それは、それがどんな結果が得られていないことを十分に公正だ

c:\Users\Jon\Test>copy "c:\Program Files (x86)\Mono-2.8"\lib\mono\2.0\gmcs.exe . 
     1 file(s) copied. 

c:\Users\Jon\Test>gmcs /r:gmcs.exe Test.cs 

c:\Users\Jon\Test>mono Test.exe 

Unhandled Exception: System.ArgumentException: 
    The expression did not set a result 
    at Mono.CSharp.Evaluator.Evaluate (System.String input) [...] 
    at EvalTest.Test.Main (System.String[] args) [...] 

- それは唯一のusingディレクティブです。しかしこれは正常に動作します:

Mono.CSharp.Evaluator.Run("System.Console.WriteLine(5 + 5);"); 
+0

DOH 'gmcs.exe」アセンブリを参照する必要があり、非常に簡単です。明確な答えをありがとう! – ChrisRohlf

2

あなたはアセンブリ参照が不足していますか?

これは、時間の95%が正しい傾向があるそれらの精神的なエラーメッセージの1つです。バックのブログ記事に行くと、この行の点に注意してください。

使い方はあなたが

関連する問題