2016-11-26 11 views
0

エラーが発生しました:コンストラクタが 'SimpleScript.Generator'型で見つかりません。C#CodeProviderエラー:コンストラクタが型に見つかりません

私は正しいパラメータを渡してみましたが、まだこのエラーが発生しています。これは私のソースコードであり、スクリプトは要素の頭部と体の配列を生成する非常に単純なコードです。また、正常にコンパイルされますが、実行時にエラーがスローされます。

string source = @" 

using System; 
using MSiteDLL; 
namespace SimpleScript 
{ 
    public static class Generator 
    { 
     public static Document Generate(Data server) 
     { 
      "+script+ @" 
        Block[] blocks = { 
        new Block(""head"", head), 
        new Block(""body"", body), 
        }; 
      return new Document(blocks); 
     } 
    } 
} 

"; 
      Dictionary<string, string> providerOptions = new Dictionary<string, string> 
       { 
        {"CompilerVersion", "v4.0"} 
       }; 
      CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions); 

      CompilerParameters compilerParams = new CompilerParameters 
      { 
       GenerateInMemory = true, 
       GenerateExecutable = false, 
       ReferencedAssemblies = { 
     "System.dll", 
     "System.Core.dll", 
     "MSiteDLL.dll", 
    } 
      }; 

      CompilerResults results = provider.CompileAssemblyFromSource(compilerParams, source); 

      if (results.Errors.Count != 0) 
      { 
       string output = ""; 
       foreach (CompilerError y in results.Errors) 
       { 
        output += y.ErrorText + Environment.NewLine; 
       } 
       throw new Exception("Compile failed:" + output); 
      } 
      object o = results.CompiledAssembly.CreateInstance("SimpleScript.Generator"); 
      MethodInfo mi = o.GetType().GetMethod("Generate"); 
      Data[] parametersArray = new Data[] { server }; 
      Document x = (Document)mi.Invoke(o, parametersArray); 
      return x; 
+3

object o = results.CompiledAssembly.CreateInstance("SimpleScript.Generator"); 

そして呼び出すためにそれらを使用します。 – Mat

+0

私は静的keywrodを削除し、それは働いた。 –

+0

ありがとうございます。 :D –

答えて

3

クラスが静的なので、静的な方法でメソッドを呼び出す必要があります。 だから、最初、この行削除:あなたはあなたが行うことができない `static`クラスをインスタンス化しようとしている

MethodInfo mi = Type.GetType("SimpleScript.Generator").GetMethod("Generate"); 
Data[] parametersArray = new Data[] { server }; 
Document x = (Document)mi.Invoke(null, parametersArray); 
+0

できるだけ早くこの回答を受け入れます。 –

+0

'MethodInfo'行から' o'を削除するのを忘れてしまったので、簡単に編集できました。 'Type.GetType(" SimpleScript.Generator ")を使用すると、型が得られます。 – Mat

関連する問題